我想知道这样做是否有任何好处。
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操作有什么区别?
答案 0 :(得分:1)
结果是混乱,你在这里加倍混淆:
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
}
}
我不是说你应该为了习惯而遵循定制。如果您通过各种方式获得突破性创新,那么这不是创新。
答案 1 :(得分:0)
正如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();
}