在C#开发中,操作SQL Server 2008是很多桌面应用的基础需求,下面我们通过WinForms界面实例,完整演示从连接数据库到实现增删改查的全流程。

环境准备
首先需要确保本地已经安装SQL Server 2008,并且创建了测试数据库和表,我们这里使用名为TestDB的数据库,其中有一张User表,结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| Id | int | 主键,自增 |
| UserName | nvarchar(50) | 用户名 |
| Age | int | 年龄 |
然后新建WinForms项目,在窗体上添加对应的输入控件和按钮,用于触发数据库操作。
数据库连接配置
首先需要在配置文件中添加数据库连接字符串,在App.config中添加如下内容:
<configuration>
<connectionStrings>
<add name="SqlConn" connectionString="Server=.;Database=TestDB;User Id=sa;Password=你的密码;" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>如果使用的是Windows身份验证,连接字符串可以改为Server=.;Database=TestDB;Integrated Security=True;。
核心操作类封装
为了避免重复编写数据库连接和操作代码,我们封装一个数据库操作辅助类:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public class SqlHelper
{
// 获取配置中的连接字符串
private static string connStr = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString;
// 执行增删改操作,返回受影响行数
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
// 执行查询,返回DataTable
public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
}
// 执行查询,返回首行首列的值
public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
conn.Open();
return cmd.ExecuteScalar();
}
}
}
}界面交互代码实现
假设窗体上有用户名输入框txtUserName、年龄输入框txtAge、查询按钮btnQuery、新增按钮btnAdd、修改按钮btnUpdate、删除按钮btnDelete,以及显示数据的DataGridView控件dgvUser,下面是各按钮的事件处理代码:
查询数据
private void btnQuery_Click(object sender, EventArgs e)
{
string sql = "SELECT Id, UserName, Age FROM User";
DataTable dt = SqlHelper.ExecuteQuery(sql);
dgvUser.DataSource = dt;
}新增数据
private void btnAdd_Click(object sender, EventArgs e)
{
string userName = txtUserName.Text.Trim();
int age;
if (!int.TryParse(txtAge.Text.Trim(), out age))
{
MessageBox.Show("请输入正确的年龄");
return;
}
string sql = "INSERT INTO User (UserName, Age) VALUES (@UserName, @Age)";
SqlParameter[] parameters = {
new SqlParameter("@UserName", userName),
new SqlParameter("@Age", age)
};
int rows = SqlHelper.ExecuteNonQuery(sql, parameters);
if (rows > 0)
{
MessageBox.Show("新增成功");
btnQuery_Click(null, null); // 刷新数据
}
else
{
MessageBox.Show("新增失败");
}
}修改数据
private void btnUpdate_Click(object sender, EventArgs e)
{
if (dgvUser.SelectedRows.Count == 0)
{
MessageBox.Show("请选择要修改的行");
return;
}
int id = Convert.ToInt32(dgvUser.SelectedRows[0].Cells["Id"].Value);
string userName = txtUserName.Text.Trim();
int age;
if (!int.TryParse(txtAge.Text.Trim(), out age))
{
MessageBox.Show("请输入正确的年龄");
return;
}
string sql = "UPDATE User SET UserName = @UserName, Age = @Age WHERE Id = @Id";
SqlParameter[] parameters = {
new SqlParameter("@UserName", userName),
new SqlParameter("@Age", age),
new SqlParameter("@Id", id)
};
int rows = SqlHelper.ExecuteNonQuery(sql, parameters);
if (rows > 0)
{
MessageBox.Show("修改成功");
btnQuery_Click(null, null); // 刷新数据
}
else
{
MessageBox.Show("修改失败");
}
}删除数据
private void btnDelete_Click(object sender, EventArgs e)
{
if (dgvUser.SelectedRows.Count == 0)
{
MessageBox.Show("请选择要删除的行");
return;
}
int id = Convert.ToInt32(dgvUser.SelectedRows[0].Cells["Id"].Value);
string sql = "DELETE FROM User WHERE Id = @Id";
SqlParameter[] parameters = {
new SqlParameter("@Id", id)
};
int rows = SqlHelper.ExecuteNonQuery(sql, parameters);
if (rows > 0)
{
MessageBox.Show("删除成功");
btnQuery_Click(null, null); // 刷新数据
}
else
{
MessageBox.Show("删除失败");
}
}注意事项
- 实际开发中需要添加异常处理,避免程序因为数据库操作异常崩溃
- 敏感信息如数据库密码不要直接写在代码里,建议使用加密的配置方式
- 操作完成后及时释放数据库连接资源,上面的封装已经通过using语句实现了自动释放
- 如果SQL Server 2008和开发环境不在同一台机器,需要把连接字符串中的Server改为对应的服务器IP地址
以上代码都是基于ADO.NET的基础实现,适合新手理解C#操作SQL Server 2008的核心逻辑,实际项目中可以根据需求扩展更多功能。
C#SQL_Server_2008WinFormsADO.NET数据库操作修改时间:2026-05-29 03:43:34