【问题标题】:How and where can I modify the auto generated query from DataAdapter?如何以及在哪里可以修改从 DataAdapter 自动生成的查询?
【发布时间】: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


【解决方案1】:

这是我的更新函数,通过从 OleDB 命令切换到 SqlCommand 并为其添加命令文本和参数来自动生成更新查询。谢谢@史蒂夫

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

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2022-11-26
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2021-12-26
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多