用数据适配器以这种方式删除记录不好吗?
Is it bad to delete records in this fashion with data adapter?
我想知道这样做是否有任何后果。
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
的一个附带好处是它将 return 删除的行数,因此它允许您在需要时验证删除:
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
}
}
我并不是说你应该为了习俗而遵循习俗。如果你有突破性的创新,一定要用它,但这不能算是创新。
正如温尼(在评论中)正确指出的那样,最好不要在不需要的地方使用 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();
}
我想知道这样做是否有任何后果。
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
的一个附带好处是它将 return 删除的行数,因此它允许您在需要时验证删除:
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
}
}
我并不是说你应该为了习俗而遵循习俗。如果你有突破性的创新,一定要用它,但这不能算是创新。
正如温尼(在评论中)正确指出的那样,最好不要在不需要的地方使用 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();
}