我搜索了一些帖子,但仍然无法使其正常工作。
我有一个用C#编写的窗口应用程序,这里我将datagridview绑定到我的数据库:
public static DataSet GetDataSet(string sql)
{
using (SqlConnection cn = new SqlConnection(constr))
{
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
我将datagridview绑定在另一个类中:
string sql = "select Amount, Price, Description from myTable";
ds = DbHelper.GetDataSet(sql);
dataGridView2.DataSource = ds.Tables[0];
我创建了一个按钮,供用户在编辑datagridview后更新数据库:
string sql = "select Amount, Price, Description from myTable";
DbHelper.UpdateDataSet(sql, ds);
MessageBox.Show("done");
public static void UpdateDataSet(string sql, DataSet ds)
{
using (SqlConnection cn = new SqlConnection(constr))
{
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
da.Update(ds);
}
}
这是错误,发生在第da.Update(ds);
行:
在传递带有修改行的DataRow集合时,更新需要有效的UpdateCommand。
感谢您的帮助。
修改 我可以用它来解决这个问题:
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
da.UpdateCommand = commandBuilder.GetUpdateCommand();
但是只有当我在datagridview中显示密钥时,否则:
对于不返回任何键列信息的SelectCommand,不支持UpdateCommand的动态SQL生成。
如果我不想在datagridview中显示密钥,如何克服这个问题?
答案 0 :(得分:0)
SqlCommandBuilder需要主键来更新字段。您仍然可以将密钥加载到DataGridView,但隐藏列。