在C#开发中,对接SQL Server数据库是非常常见的需求,通过ADO.NET提供的组件可以快速实现数据库的连接与各类数据操作,整个流程清晰且易于实现。

准备工作
在开始编写代码前,需要确保本地已经安装SQL Server数据库,并且创建了对应的测试数据库和表。本文以名为TestDB的数据库为例,其中有一张User表,表结构如下:
| 列名 | 数据类型 | 说明 |
|---|---|---|
| Id | int | 主键,自增 |
| UserName | nvarchar(50) | 用户名 |
| Age | int | 年龄 |
同时需要在项目中引用System.Data.SqlClient命名空间,如果是.NET Core及以上版本,需要安装System.Data.SqlClient NuGet包,这是操作SQL Server数据库的核心依赖。
配置数据库连接字符串
连接字符串是C#连接SQL Server的关键配置,需要包含数据库服务器地址、数据库名称、身份验证方式等信息。常见的连接字符串格式如下:
- 使用SQL Server身份验证:
Server=服务器地址;Database=数据库名称;User Id=用户名;Password=密码; - 使用Windows身份验证:
Server=服务器地址;Database=数据库名称;Integrated Security=True;
如果是本地默认实例的SQL Server,服务器地址可以写为.或者localhost,示例连接字符串如下:
// 本地SQL Server,Windows身份验证,连接TestDB数据库 string connectionString = "Server=.;Database=TestDB;Integrated Security=True;";
连接数据库并执行查询操作
查询操作是最常用的数据库操作之一,通过SqlConnection建立连接,SqlCommand执行命令,SqlDataReader读取返回的结果集。下面是查询User表所有数据的示例代码:
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
// 连接字符串
string connectionString = "Server=.;Database=TestDB;Integrated Security=True;";
// 查询SQL语句
string sql = "SELECT Id, UserName, Age FROM User";
// 创建连接对象
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
// 打开连接
connection.Open();
Console.WriteLine("数据库连接成功");
// 创建命令对象
using (SqlCommand command = new SqlCommand(sql, connection))
{
// 执行查询,获取读取器
using (SqlDataReader reader = command.ExecuteReader())
{
// 循环读取每一行数据
while (reader.Read())
{
int id = reader.GetInt32(0);
string userName = reader.GetString(1);
int age = reader.GetInt32(2);
Console.WriteLine($"Id:{id}, 用户名:{userName}, 年龄:{age}");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"操作失败:{ex.Message}");
}
finally
{
// 关闭连接,using语句会自动释放资源,这里可以省略
// connection.Close();
}
}
}
}
执行插入、更新、删除操作
插入、更新、删除都属于非查询操作,执行后返回受影响的行数,使用ExecuteNonQuery方法即可实现。下面是三个操作的示例代码:
插入数据
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "Server=.;Database=TestDB;Integrated Security=True;";
// 插入SQL语句,使用参数化避免SQL注入
string sql = "INSERT INTO User (UserName, Age) VALUES (@UserName, @Age)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql, connection))
{
// 添加参数,设置值
command.Parameters.AddWithValue("@UserName", "张三");
command.Parameters.AddWithValue("@Age", 25);
// 执行非查询操作,获取受影响行数
int rows = command.ExecuteNonQuery();
Console.WriteLine($"插入成功,受影响行数:{rows}");
}
}
catch (Exception ex)
{
Console.WriteLine($"插入失败:{ex.Message}");
}
}
}
}
更新数据
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "Server=.;Database=TestDB;Integrated Security=True;";
// 更新SQL语句,更新Id为1的用户年龄
string sql = "UPDATE User SET Age = @Age WHERE Id = @Id";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.AddWithValue("@Age", 26);
command.Parameters.AddWithValue("@Id", 1);
int rows = command.ExecuteNonQuery();
Console.WriteLine($"更新成功,受影响行数:{rows}");
}
}
catch (Exception ex)
{
Console.WriteLine($"更新失败:{ex.Message}");
}
}
}
}
删除数据
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = "Server=.;Database=TestDB;Integrated Security=True;";
// 删除SQL语句,删除Id为1的用户
string sql = "DELETE FROM User WHERE Id = @Id";
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.AddWithValue("@Id", 1);
int rows = command.ExecuteNonQuery();
Console.WriteLine($"删除成功,受影响行数:{rows}");
}
}
catch (Exception ex)
{
Console.WriteLine($"删除失败:{ex.Message}");
}
}
}
}
注意事项
在实际开发中需要注意以下几点:
- 所有数据库相关对象都要使用
using语句包裹,确保资源及时释放,避免连接泄漏。 - 执行SQL语句时尽量使用参数化查询,不要直接拼接字符串,防止SQL注入攻击。
- 连接字符串不要硬编码在代码中,最好放在配置文件里,方便后续修改和维护。
- 操作数据库时要做好异常处理,避免程序因为数据库异常直接崩溃。
以上就是C#连接并操作SQL Server数据库的完整流程,按照上述步骤即可实现各类常见的数据库操作需求。
C#SQL_ServerADO_NET数据库连接数据操作修改时间:2026-06-21 18:21:35