C# 如何以及在何处修改从DataAdapter自动生成的查询?
我使用的是DataGridView,我想从网格中更新我的表。使用DataAdapter.Update(dataTable)时,我收到错误“不支持针对多个基表生成动态SQL”。原因是我通过连接两个表来填充数据表 这是我用来从网格更新数据库的函数C# 如何以及在何处修改从DataAdapter自动生成的查询?,c#,.net,sql-server,winforms,datagridview,C#,.net,Sql Server,Winforms,Datagridview,我使用的是DataGridView,我想从网格中更新我的表。使用DataAdapter.Update(dataTable)时,我收到错误“不支持针对多个基表生成动态SQL”。原因是我通过连接两个表来填充数据表 这是我用来从网格更新数据库的函数 private void button2_Click(object sender, EventArgs e) { dataGridView2.EndEdit(); //da.Update(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);
}
我知道我必须创建自己的查询来从网格更新表。我想知道如何以及在何处输入代码来自动生成更新查询。这里是我的更新函数,通过从OleDB命令切换到SqlCommand并添加commandtext和参数来自动生成更新查询。谢谢你,史蒂夫
private void button2_Click(object sender, EventArgs e)
{
dataGridView2.EndEdit();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.Parameters.Add("@EngWord", SqlDbType.NVarChar, 256, "EngWord");
com.Parameters.Add("@ID", SqlDbType.Int, 32, "ID");
com.CommandText = "update Name_Corpus2 set EngWord = @EngWord where ID = @ID";
da.UpdateCommand = com;
da.Update(dataTable);
MessageBox.Show("Updated");
bind(classification, language);
}
下面是我更新的函数,通过从OleDB命令切换到SqlCommand并为其添加commandtext和参数,自动生成更新查询。谢谢你,史蒂夫
private void button2_Click(object sender, EventArgs e)
{
dataGridView2.EndEdit();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.Parameters.Add("@EngWord", SqlDbType.NVarChar, 256, "EngWord");
com.Parameters.Add("@ID", SqlDbType.Int, 32, "ID");
com.CommandText = "update Name_Corpus2 set EngWord = @EngWord where ID = @ID";
da.UpdateCommand = com;
da.Update(dataTable);
MessageBox.Show("Updated");
bind(classification, language);
}
您应该使用commandtext和参数创建自己的SqlCommand,然后将其设置为DataAdapter@Steve谢谢你的快速回复。所以我照你说的做了,我犯了个错误。更新了我在问题中的功能。当我尝试更新表时,它会说“必须声明标量变量”@EngWord“。在
@ID
之前添加@EngWord
参数(即遵循查询中占位符的确切顺序。这对于OleDB是必需的)@Steve感谢您的帮助!我按照你说的做了,但我再次面临da.Update声明的问题。所以我去掉了OleDB连接/命令,只使用了SqlConnection/SqlDataAdapter,它工作得非常好!抱歉,如果我的问题是新手的问题,这是我的第一个windows窗体应用程序!当我使用OleDB连接时,我无法将@EngWord参数的数据类型设置为NVarChar,因为它似乎只支持VarChar。也许这就是问题所在。切换到SqlConnection后,我设法将参数的数据类型更改为SqlDbType.NVarChar,因为在我的SQL数据库中,EngWord列的类型为NVarChar。您应该使用其commandtext和参数创建自己的SqlCommand,然后将其设置为DataAdapter@Steve谢谢你的快速回复。所以我照你说的做了,我犯了个错误。更新了我在问题中的功能。当我尝试更新表时,它会说“必须声明标量变量”@EngWord“。在@ID
之前添加@EngWord
参数(即遵循查询中占位符的确切顺序。这对于OleDB是必需的)@Steve感谢您的帮助!我按照你说的做了,但我再次面临da.Update声明的问题。所以我去掉了OleDB连接/命令,只使用了SqlConnection/SqlDataAdapter,它工作得非常好!抱歉,如果我的问题是新手的问题,这是我的第一个windows窗体应用程序!当我使用OleDB连接时,我无法将@EngWord参数的数据类型设置为NVarChar,因为它似乎只支持VarChar。也许这就是问题所在。切换到SqlConnection后,我设法将参数的数据类型更改为SqlDbType.NVarChar,因为在我的SQL数据库中,EngWord列的类型为NVarChar。