【问题标题】:How to use SQL Command Builder and SQL Data Apdater如何使用 SQL 命令生成器和 SQL 数据适配器
【发布时间】:2012-11-02 06:32:49
【问题描述】:

我从 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx 我发现我可以使用 select 和 update 命令显示对数据集/数据库完成的更新。

如果我使用单个数据集,SQL 命令生成器的概念很清楚,但如果我想使用两个不同的数据集怎么办?

场景:我正在将数据库中的值读入一个数据集 ds1;这是分配给 sql 适配器和 sql 命令生成器。现在,我只从 ds1 中读取选定的值并将其存储到第二个数据集 ds2 中;未分配给 sql 数据适配器和 sql 命令生成器。

如果我更新 ds2 上的任何数据,我担心它是否会更新数据库。另外,我应该如何使用 SQL 命令生成器和 SQL 适配器来做到这一点。

//主数据集

ds = new ProductDataSet();
        command = new SqlCommand(
            "SELECT no, name, price, cost, dept FROM PRODUCTS", connection);
        adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;            
        adapter.Fill(ds, "table");

主数据集在表单加载事件中填充。用户将输入他选择的项目编号,该项目将从主 ds 搜索并保存/显示到 2nd ds(2nd ds 目前未与任何适配器或命令生成器连接)。例如; 2nd ds 有 3 个项目。

现在说用户更新第二个 ds 上的任何信息,它应该自动更新数据库并显示在网格上。

//第二次ds2更新代码

for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
                            {
 string item = ds2.Tables[0].Rows[i][0].ToString();                   

command = new SqlCommand("UPDATE PRODUCTS SET " + _colName + " = '" + _newValue + "'" + "WHERE ITEM_NO = '" + item + "'", Class1.conn);                                    
datagrid.DataSource = ds2.Tables[0];

}

根据您的建议,如果我在上面的代码中添加/声明适配器/构建器,它不起作用。我收到表映射错误。

【问题讨论】:

    标签: c# .net dataadapter data-access sqlcommandbuilder


    【解决方案1】:

    使用另一个 SQLAdapter 和 SQLCommandBuilder。该页面上的示例显示了如何更新数据库。您只需要以查询的形式提供要更新的字段,例如:

    SELECT Name, Address, Phone, Email FROM Contact
    

    命令生成器将生成正确的 SQL UPDATE 语句。

    【讨论】:

    • 是否可以从 dataset1 中读取/选择行并插入到 dataset2 中,然后在 dataset2 上使用 SQL 适配器和 SQL 命令生成器来更新数据库中的数据。
    • @RushabhShah 有很多关于如何处理这些事情的线索。请浏览这里。甚至相关的问题也可能会有所帮助
    • @RushabhShah,是的 - 这样做没有问题。
    • @David:你能给我看一些示例代码吗?我从昨天开始就在努力,但我无法完成我的任务。
    • 你能用你尝试过的代码更新你的问题并描述结果吗?
    【解决方案2】:

    SqlCommandBuilder 会根据单个表的 SELECT 语句自动生成 INSERT、UPDATE 和 DELETE sql 语句。

    对于使用 SqlCommandBuilder 生成的 Transact-SQL 语句,有 2 个步骤

    步骤 1. 设置 SqlDataAdapter 对象的“SelectCommand”属性

          SqlDataAdapter dataAdapter = new SqlDataAdapter();
    
          dataAdapter.SelectCommand = new SqlCommand("SELECT_Query", con);
    
          DataSet dataSet = new DataSet();
          dataAdapter.Fill(dataSet, "Students");
    

    步骤 2. 创建 SqlCommandBuilder 类的实例并关联 上面使用 SqlCommandBuilder 对象的 DataAdapter 属性创建的 SqlDataAdapter 对象

            SqlCommandBuilder builder = new SqlCommandBuilder();
            builder.DataAdapter = dataAdapter;
    

    步骤 3. 更新 ds1 的记录

             dataAdapter.Update(ds1, "Students");
    

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2010-12-10
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多