c#连接SQL Server数据库(完整代码在最后)
- 安装System.Data.SqlClient包
using System.Data.SqlClient;
- 建立连接
string connectionString = "server=localhost; database=test; uid=sa; pwd=961121";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
server=localhost
:指定服务器名称为 localhost
,表示数据库服务器位于本地计算机上。localhost
是一个特殊的名称,用于指代本地主机。
database=test
:指定要连接的数据库名称为 test
。这意味着连接成功后,将在 test
数据库上执行数据库操作。
uid=sa
:指定用户身份验证使用的用户名为 sa
。sa
是 SQL Server 中的系统管理员账户。
pwd=961121
:指定用户身份验证使用的密码为 961121
。
- 添加数据
// 插入数据
static void InsertData(SqlConnection connection, string tableName, string username, string password)
{
string insertQuery = $"INSERT INTO [{tableName}] (username, password) VALUES (@Username, @Password)";
using (SqlCommand command = new SqlCommand(insertQuery, connection))
{
command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@Password", password);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
InsertData
方法用于向指定的表中插入一条新的记录。以下是该方法的详细介绍:
static void InsertData(SqlConnection connection, string tableName, string username, string password)
SqlConnection connection
:表示已建立的到数据库的连接。string tableName
:表示要插入数据的目标表的名称。string username
:表示要插入的用户名。string password
:表示要插入的密码。
在方法内部,首先构建了一个 SQL 插入语句,语句的格式为:
INSERT INTO [表名] (列1, 列2, 列3, ...) VALUES (@参数1, @参数2, @参数3, ...)
在这里,[表名]
是我们传递给方法的 tableName
参数;(列1, 列2, 列3, ...)
是目标表的列名;(@参数1, @参数2, @参数3, ...)
是参数化查询的占位符。参数化查询可以防止 SQL 注入攻击,并且可以处理字符串中的特殊字符,例如单引号。
接下来,创建一个 SqlCommand
对象,它使用构建好的插入语句和数据库连接。
using (SqlCommand command = new SqlCommand(insertQuery, connection))
然后,使用 command.Parameters.AddWithValue()
方法添加参数并设置它们的值。在这里,我们将 username
和 password
参数绑定到 SQL 查询中的 @Username
和 @Password
参数。
command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@Password", password);
接着,使用 ExecuteNonQuery()
方法执行 SQL 查询,并返回受影响的行数。由于这是一个插入操作,所以我们通常希望看到受影响的行数为 1。
int rowsAffected = command.ExecuteNonQuery();
最后,将受影响的行数输出到控制台,以指示插入操作的结果。
Console.WriteLine($"{rowsAffected} 行受影响。");
这样,InsertData
方法就完成了向指定表中插入新记录的操作。
- 查询数据
// 查询数据
static void RetrieveData(SqlConnection connection, string tableName)
{
string selectQuery = $"SELECT * FROM [{tableName}]";
using (SqlCommand command = new SqlCommand(selectQuery, connection))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"username: {reader["username"]}, password: {reader["password"]}");
}
}
}
RetrieveData
方法用于从指定表中检索数据,并将结果输出到控制台。以下是该方法的详细介绍:
static void RetrieveData(SqlConnection connection, string tableName)
SqlConnection connection
:表示已建立的到数据库的连接。string tableName
:表示要从中检索数据的目标表的名称。
在方法内部,首先构建了一个 SQL 查询语句,用于检索指定表中的所有列和行。查询语句的格式为:
SELECT * FROM [表名]
在这里,[表名]
是我们传递给方法的 tableName
参数。
接下来,创建一个 SqlCommand
对象,它使用构建好的查询语句和数据库连接。
using (SqlCommand command = new SqlCommand(selectQuery, connection))
然后,使用 command.ExecuteReader()
方法执行 SQL 查询,并返回一个 SqlDataReader
对象,该对象可以逐行读取查询结果。
using (SqlDataReader reader = command.ExecuteReader())
在 while
循环中,通过调用 reader.Read()
方法,逐行读取查询结果,直到没有更多的行可读。在循环内部,通过 reader["列名"]
语法,可以通过列名访问每一行中的字段值。
while (reader.Read())
{
Console.WriteLine($"username: {reader["username"]}, password: {reader["password"]}");
}
最后,完成数据检索操作后,释放 SqlDataReader
和 SqlCommand
对象的资源。这是通过 using
块来实现的,在块结束时会自动调用 Dispose()
方法释放资源。
通过以上步骤,RetrieveData
方法就完成了从指定表中检索数据并输出到控制台的操作。
- 更新数据
// 更新数据
static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
{
string updateQuery = $"UPDATE [{tableName}] SET password = @NewPassword WHERE username = @Username";
using (SqlCommand command = new SqlCommand(updateQuery, connection))
{
command.Parameters.AddWithValue("@NewPassword", newPassword);
command.Parameters.AddWithValue("@Username", username);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
UpdateData
方法用于更新指定表中的数据。以下是该方法的详细介绍:
static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
SqlConnection connection
:表示已建立的到数据库的连接。string tableName
:表示要更新数据的目标表的名称。string username
:表示要更新密码的用户的用户名。string newPassword
:表示要更新的新密码。
在方法内部,首先构建了一个 SQL 更新语句,语句的格式为:
UPDATE [表名] SET 列名 = @参数 WHERE 条件列名 = @条件参数
在这里,[表名]
是我们传递给方法的 tableName
参数;列名
是要更新的列名,这里是 password
;@参数
是要更新的新密码,由方法的 newPassword
参数提供;条件列名
是更新数据所依据的条件列,这里是 username
;@条件参数
是条件列所对应的值,由方法的 username
参数提供。
接下来,创建一个 SqlCommand
对象,它使用构建好的更新语句和数据库连接。
using (SqlCommand command = new SqlCommand(updateQuery, connection))
然后,使用 command.Parameters.AddWithValue()
方法添加参数并设置它们的值。在这里,我们将 newPassword
和 username
参数绑定到 SQL 查询中的 @NewPassword
和 @Username
参数。
command.Parameters.AddWithValue("@NewPassword", newPassword);
command.Parameters.AddWithValue("@Username", username);
接着,使用 ExecuteNonQuery()
方法执行 SQL 更新查询,并返回受影响的行数。由于这是一个更新操作,所以我们通常希望看到受影响的行数为 1。
int rowsAffected = command.ExecuteNonQuery();
最后,将受影响的行数输出到控制台,以指示更新操作的结果。
Console.WriteLine($"{rowsAffected} 行受影响。");
这样,UpdateData
方法就完成了更新指定表中数据的操作。
- 删除数据
// 删除数据
static void DeleteData(SqlConnection connection, string tableName, string username)
{
string deleteQuery = $"DELETE FROM [{tableName}] WHERE username = @Username";
using (SqlCommand command = new SqlCommand(deleteQuery, connection))
{
command.Parameters.AddWithValue("@Username", username);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
DeleteData
方法用于从指定表中删除数据。以下是该方法的详细介绍:
static void DeleteData(SqlConnection connection, string tableName, string username)
SqlConnection connection
:表示已建立的到数据库的连接。string tableName
:表示要删除数据的目标表的名称。string username
:表示要删除数据的用户名。
在方法内部,首先构建了一个 SQL 删除语句,语句的格式为:
DELETE FROM [表名] WHERE 条件列名 = @条件参数
在这里,[表名]
是我们传递给方法的 tableName
参数;条件列名
是删除数据所依据的条件列,这里是 username
;@条件参数
是条件列所对应的值,由方法的 username
参数提供。
接下来,创建一个 SqlCommand
对象,它使用构建好的删除语句和数据库连接。
using (SqlCommand command = new SqlCommand(deleteQuery, connection))
然后,使用 command.Parameters.AddWithValue()
方法添加参数并设置它们的值。在这里,我们将 username
参数绑定到 SQL 查询中的 @Username
参数。
command.Parameters.AddWithValue("@Username", username);
接着,使用 ExecuteNonQuery()
方法执行 SQL 删除查询,并返回受影响的行数。由于这是一个删除操作,所以我们通常希望看到受影响的行数为 1。
int rowsAffected = command.ExecuteNonQuery();
最后,将受影响的行数输出到控制台,以指示删除操作的结果。
Console.WriteLine($"{rowsAffected} 行受影响。");
这样,DeleteData
方法就完成了从指定表中删除数据的操作。
- 完整代码
using System;
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
string connectionString = "server=localhost; database=test; uid=sa; pwd=961121";
// 建立连接
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
// 打开连接
connection.Open();
// 添加数据
Console.WriteLine("1. 插入数据:");
InsertData(connection, "user", "John", "123456");
// 查询数据
Console.WriteLine("\n2. 查询数据:");
RetrieveData(connection, "user");
// 更新数据
Console.WriteLine("\n3. 更新数据:");
UpdateData(connection, "user", "John", "456789");
// 查询更新后的数据
Console.WriteLine("\n4. 查询更新后的数据:");
RetrieveData(connection, "user");
// 删除数据
Console.WriteLine("\n5. 删除数据:");
DeleteData(connection, "user", "John");
// 查询删除后的数据
Console.WriteLine("\n6. 查询删除后的数据:");
RetrieveData(connection, "user");
}
catch (SqlException ex)
{
Console.WriteLine($"SQL Error: {ex.Message}");
}
finally
{
connection.Close();
}
}
}
// 插入数据
static void InsertData(SqlConnection connection, string tableName, string username, string password)
{
string insertQuery = $"INSERT INTO [{tableName}] (username, password) VALUES (@Username, @Password)";
using (SqlCommand command = new SqlCommand(insertQuery, connection))
{
command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@Password", password);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
// 查询数据
static void RetrieveData(SqlConnection connection, string tableName)
{
string selectQuery = $"SELECT * FROM [{tableName}]";
using (SqlCommand command = new SqlCommand(selectQuery, connection))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"username: {reader["username"]}, password: {reader["password"]}");
}
}
}
// 更新数据
static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
{
string updateQuery = $"UPDATE [{tableName}] SET password = @NewPassword WHERE username = @Username";
using (SqlCommand command = new SqlCommand(updateQuery, connection))
{
command.Parameters.AddWithValue("@NewPassword", newPassword);
command.Parameters.AddWithValue("@Username", username);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
// 删除数据
static void DeleteData(SqlConnection connection, string tableName, string username)
{
string deleteQuery = $"DELETE FROM [{tableName}] WHERE username = @Username";
using (SqlCommand command = new SqlCommand(deleteQuery, connection))
{
command.Parameters.AddWithValue("@Username", username);
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} 行受影响。");
}
}
}
标签:username,string,C#,tableName,Server,connection,command,SQL,SqlCommand
From: https://www.cnblogs.com/LargeLin/p/18047606