用数据适配器以这种方式删除记录是不好的吗?
本文关键字:记录 删除 适配器 数据 方式 | 更新日期: 2023-09-27 17:53:23
我想知道这样做是否有什么后果。
using (conn = new SqlConnection(cs))
{
SqlCommand selectCommand = new SqlCommand("delete from Users where UserID = @id", conn);
selectCommand.Parameters.AddWithValue("@id", id);
ds = new DataSet();
da.SelectCommand = selectCommand;
da.Fill(ds);
}
我看到大多数示例使用sqlcommandbuilder或.delete()或.remove()方法。如果我这样做所有的crud操作有什么不同?
后果是混乱,而你在这里使混乱加倍:
- 常用的删除记录的方法是使用
ExecuteNonQuery
. - 该方法用于删除行,但您已将命令命名为
selectCommand
。这混淆了方法的意图。你应该努力在你的代码中显得明显,而不是迂回。
遵循自定义。善待可能需要维护您代码的开发人员。这也包括你,如果你在写完几个月后还得拆开看的话。如果是另一个开发人员,他们会骂你是傻瓜,你就很难用这样的代码为自己辩护了。
使用ExecuteNonQuery
的一个附带好处是,它将返回删除的行数,因此如果需要,它允许您验证删除:
using (conn = new SqlConnection(cs)) {
SqlCommand deleteCommand = new SqlCommand("delete from Users where UserID = @id", conn);
deleteCommand.Parameters.AddWithValue("@id", id);
conn.Open();
int rowsDeleted = deleteCommand.ExecuteNonQuery();
if (rowsDeleted != 1) {
// something unexpected happened
}
}
我不是说你应该为了习惯而遵循习惯。如果你有一个突破性的创新,你可以利用它,但这并不是一个创新。
正如Winney正确指出的那样(在评论中),最好不要在不需要的地方使用DataSet/DataAdapter,从而使事情复杂化。
您可以为您的案例探索ExecuteNonQuery
。
using (conn = new SqlConnection(cs))
{
SqlCommand selectCommand = new SqlCommand("delete from Users where UserID = @id", conn);
selectCommand.Parameters.AddWithValue("@id", id);
selectCommand.Connection.Open();
selectCommand.ExecuteNonQuery();
}