Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以及在何处修改从DataAdapter自动生成的查询?_C#_.net_Sql Server_Winforms_Datagridview - Fatal编程技术网

C# 如何以及在何处修改从DataAdapter自动生成的查询?

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);

我使用的是DataGridView,我想从网格中更新我的表。使用DataAdapter.Update(dataTable)时,我收到错误“不支持针对多个基表生成动态SQL”。原因是我通过连接两个表来填充数据表

这是我用来从网格更新数据库的函数

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。