如何使用SQL Data Adapter的Update命令更新数据表中的行
使用SqlDataAdapter更新Students表的行
嘿,看你已经搞定了Insert操作,用SqlDataAdapter做更新其实思路相通,只是需要额外配置更新命令(或者用工具自动生成)。我给你两种常用的实现方式,一步步来:
方式一:手动配置UpdateCommand(更灵活,适合复杂场景)
这种方式需要我们自己写UPDATE语句和参数,能精准控制更新逻辑,还能避免SQL注入:
// 从界面获取要更新的学生ID和新的信息 int targetID = int.Parse(TextBoxID.Text); // 用来输入要更新的学生ID的文本框 string updatedName = TextBoxNewName.Text; string updatedGender = TextBoxNewGender.Text; int updatedMarks = int.Parse(TextBoxNewMarks.Text); string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; using (SqlConnection con = new SqlConnection(connectionString)) { // 先查询出要更新的那条记录(只查目标ID,提升效率) SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Students WHERE ID = @TargetID", con); adapter.SelectCommand.Parameters.AddWithValue("@TargetID", targetID); // 把查询结果填充到DataTable DataTable studentTable = new DataTable(); adapter.Fill(studentTable); if (studentTable.Rows.Count > 0) { // 获取要修改的行,更新字段值 DataRow targetRow = studentTable.Rows[0]; targetRow["Name"] = updatedName; targetRow["Gender"] = updatedGender; targetRow["Marks"] = updatedMarks; // 配置UpdateCommand:指定更新语句和参数 adapter.UpdateCommand = new SqlCommand( "UPDATE Students SET Name = @NewName, Gender = @NewGender, Marks = @NewMarks WHERE ID = @TargetID", con ); // 给UpdateCommand添加参数 adapter.UpdateCommand.Parameters.AddWithValue("@NewName", updatedName); adapter.UpdateCommand.Parameters.AddWithValue("@NewGender", updatedGender); adapter.UpdateCommand.Parameters.AddWithValue("@NewMarks", updatedMarks); adapter.UpdateCommand.Parameters.AddWithValue("@TargetID", targetID); // 执行更新,返回受影响的行数 int rowsUpdated = adapter.Update(studentTable); if (rowsUpdated > 0) { Console.WriteLine("学生信息更新成功!"); // 或者用MessageBox弹出提示 } } else { Console.WriteLine("未找到对应ID的学生记录!"); } }
关键点说明:
- 必须通过
SelectCommand先获取要更新的记录,这样SqlDataAdapter才能跟踪数据的变更状态 WHERE ID = @TargetID是核心:确保只更新目标行,避免误改其他记录- 参数化查询一定要用,不仅能防止SQL注入,还能处理字符串包含特殊字符、数值类型转换等问题
方式二:用SqlCommandBuilder自动生成命令(快捷简单)
如果你的更新逻辑比较简单,且Students表有主键(比如ID是主键),可以用SqlCommandBuilder自动生成UpdateCommand、InsertCommand和DeleteCommand,省去手动写SQL的麻烦:
int targetID = int.Parse(TextBoxID.Text); string updatedName = TextBoxNewName.Text; string updatedGender = TextBoxNewGender.Text; int updatedMarks = int.Parse(TextBoxNewMarks.Text); string connectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; using (SqlConnection con = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Students WHERE ID = @TargetID", con); adapter.SelectCommand.Parameters.AddWithValue("@TargetID", targetID); // 创建SqlCommandBuilder,它会基于SelectCommand自动生成更新命令 SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter); DataTable studentTable = new DataTable(); adapter.Fill(studentTable); if (studentTable.Rows.Count > 0) { DataRow targetRow = studentTable.Rows[0]; targetRow["Name"] = updatedName; targetRow["Gender"] = updatedGender; targetRow["Marks"] = updatedMarks; // 直接调用Update,CommandBuilder已经帮我们搞定了UpdateCommand int rowsUpdated = adapter.Update(studentTable); Console.WriteLine($"成功更新了 {rowsUpdated} 条记录!"); } else { Console.WriteLine("未找到要更新的学生!"); } }
注意事项:
- SqlCommandBuilder要求
SelectCommand必须返回主键或唯一约束列(比如你的ID字段),否则无法确定要更新哪一行 - 这种方式适合简单的单表更新,复杂的多表关联更新还是建议手动写命令
内容的提问来源于stack exchange,提问作者Rexksvii
相关产品推荐
相关产品推荐

