用数据适配器以这种方式删除记录是不是很糟糕?

时间:2015-06-05 01:48:50

标签: c# ado.net

我想知道这样做是否有任何好处。

            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操作有什么区别?

2 个答案:

答案 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();          
}