我从http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx阅读了 SQL 命令生成器类 ,我发现我可以使用 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 目前未与任何适配器或命令生成器连接)。例如;第二个 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];
}
根据您的建议,如果我在上面的代码中添加/声明适配器/生成器,它不起作用。我收到表映射错误。