【问题标题】:What is the exact difference between calling SqlDataAdapter with a SQL query or a SqlCommand?使用 SQL 查询或 SqlCommand 调用 SqlDataAdapter 之间的确切区别是什么?
【发布时间】:2018-09-17 16:42:32
【问题描述】:

代码:1

 string Query="Select * from Employee";
 SqlCommand cmd=new SqlCommand(Query,con);
 SqlDataAdapter da=new SqlDataAdapter(cmd);
 da.Fill(ds)//DataSet

代码:2

 string Query="Select * from Employee";
 SqlDataAdapter da=new SqlDataAdapter(Query,con);
 da.Fill(ds)

谁能解释一下上面两组代码的区别?

【问题讨论】:

    标签: c#


    【解决方案1】:

    IMO,SqlCommand 倾向于如何获取数据,而 SqlDataAdapter 更倾向于如何将数据返回到 C# 代码(主要在 DataSet 和 DataTables 中)。

    另外,使用 SqlCommand 时不需要 Data Adapter。 SqlCommand 具有 ExecuteQuery 和 ExecuteNonQuery 以按原样执行 Sql。您还可以使用 SqlCommand 调用数据库上的 StoredProcs。

    【讨论】:

    • SqlCommand 还允许您指定参数、事务设置、超时等...
    • 数据适配器不是返回数据,而是修改数据。它们只是作为使用 DataTables 和 DataSets 简化拖放 CRUD 开发的一种方式而创建的。您可以直接从 DbDataReader 加载 DataTable。适配器虽然提供了持久化对数据表所做的更改所需的 INSERT/UPDATE/DELETE 命令。
    • @PanagiotisKanavos - 同意你的看法 - DataAdapter 有助于填充 DataSet/DataTables - 然后(大部分)在代码中使用,以允许用户进行 CRUD。稍后,更改会/可以保存回数据库,因为 DataAdapter 知道如何这样做(通过插入/更新/删除命令)。我的回应/意见是强调 SqlCommand 和 SqlDataAdapter 不是一回事(就像接受的答案一样)。
    【解决方案2】:

    没有。在第一个代码块中,您自己创建一个命令。查看constructor 调用SqlDataAdapter 中的效果。它只是将该命令分配给SelectCommand:

    public SqlDataAdapter(SqlCommand selectCommand) : this() {
        SelectCommand = selectCommand;
    }
    

    在第二个代码块中,您依靠SqlDataAdapter 根据查询创建SqlCommand 并将其分配给in another constructor

    public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection) : this() {
           SelectCommand = new SqlCommand(selectCommandText, selectConnection);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2013-03-25
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多