【发布时间】:2016-10-18 11:51:54
【问题描述】:
我正在使用 DataGridView,我想从网格更新我的表。使用 DataAdapter.Update(dataTable) 时出现错误“不支持对多个基表进行动态 SQL 生成”。原因是我通过连接 2 个表填充了我的 dataTable。
这是我用来从网格更新我的数据库的函数。
private void button2_Click(object sender, EventArgs e)
{
dataGridView2.EndEdit();
//da.Update(dataTable);
OleDbCommand com = new OleDbCommand();
com.Connection = connection;
com.CommandText = "update Name_Corpus2 set EngWord = @EngWord where ID = @ID";
com.Parameters.Add("@ID", OleDbType.Integer, 32, "ID");
com.Parameters.Add("@EngWord", OleDbType.VarChar, 64, "EngWord");
da.UpdateCommand = com;
da.Update(dataTable);
MessageBox.Show("Updated");
bind(classification, language);
}
我知道我必须创建自己的查询才能从网格更新表格。我想知道我必须如何以及在哪里输入代码来自动生成我的更新查询。
【问题讨论】:
-
您应该使用其命令文本和参数创建自己的 SqlCommand,然后将其设置为 DataAdapter 的 UpdateCommand 属性
-
@Steve 感谢您的快速响应。所以我按照你说的做了,我得到了一个错误。更新了我在问题中的功能。当我尝试更新表格时,它显示“必须声明标量变量“@EngWord”。”
-
在
@ID之前添加@EngWord参数(IE 遵循查询中占位符的确切顺序。这对于 OleDB 是强制性的) -
@Steve 谢谢你的帮助!我按照你说的做了,但我再次遇到了 da.Update 语句的问题。所以我摆脱了 OleDB 连接/命令,只使用了 SqlConnection/SqlDataAdapter,它工作得很好!对不起,如果我的问题是菜鸟的问题,这是我的第一个 Windows 窗体应用程序!
-
当我使用 OleDB 连接时,我无法将 @EngWord 参数的数据类型设置为 NVarChar,因为它似乎只支持 VarChar。也许这就是问题所在。切换到 SqlConnection 后,我设法将参数的数据类型更改为 SqlDbType.NVarChar,因为在我的 SQL 数据库中,EngWord 列的类型为 nvarchar。
标签: c# .net sql-server winforms datagridview