2012-11-13 106 views
0

我从 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx读取SQL命令生成器类,我发现我可以使用select和update命令显示对数据集/数据库所做的更新。如何使用SQL命令生成器和SQL数据Apdater

如果我使用单个数据集,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上搜索并保存/显示到第二个ds上(第二个ds现在不与任何适配器或命令生成器连接)。例如;第二个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]; 

}

根据您的建议,如果我加入/宣称在上面的代码适配器/构建它不工作。我得到表映射错误。

回答

2

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

SELECT Name, Address, Phone, Email FROM Contact 

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

+0

的更新记录是否有可能从DataSet1的读/选择行和插入dataset2,然后使用SQL适配器和SQL命令生成器上dataset2在更新数据库中的数据。 –

+0

@RushabhShah关于如何处理这些事情有很多线索。请在这里浏览。即使相关的问题可能会帮助 – nawfal

+0

@RushabhShah,是的 - 这样做没有问题。 – prprcupofcoffee

0

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

对于Transact-SQL语句使用SqlCommandBuilder生成,有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对象的DataAdapter属性关联上述创建的SqlDataAdapter对象

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

步骤3. DS1

  dataAdapter.Update(ds1, "Students"); 
相关问题