【问题标题】:Error with SqlDataAdapter UpdateSqlDataAdapter 更新出错
【发布时间】:2015-12-30 18:13:08
【问题描述】:

使用 C#,SQL Server 2016 - 尝试编写一种方法来更新数据集中的每条记录 - 将单个字段更新为新值 - 使用 DataAdapter 对象,并收到以下错误消息:

不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成。

这是我的代码(包含DataSet TheDSSQLDataAdapter TheAdapterDataTable TheDataTable 的类的方法):

    public void updateDSField<T>(string fieldName, T newVal)
    {
        // Updates field in dataset

        SqlCommandBuilder builder = new SqlCommandBuilder(TheAdapter);
        var col = TheDataTable.Columns[fieldName];
        foreach (DataRow row in TheDataTable.Rows) row[col] = newVal;
        TheAdapter.UpdateCommand = builder.GetUpdateCommand();
        TheAdapter.Update(TheDS);
    }   

我读到一些关于 SqlCommandBuilder 无法处理 >1000 行的信息 - 对吗?无论哪种方式,执行此操作的正确方法是什么?

【问题讨论】:

  • 真的不清楚你想在这里做什么。
  • @Rahul - 编辑了帖子;希望这更清楚一点。

标签: c# sql-server sqlconnection


【解决方案1】:

我需要构建自己的命令字符串,因为构建器不能处理超过 1000 行。一开始我担心这会更新整个表格,但是这个链接

C# DataTable Update Multiple Lines

让我放心。 (假设我也知道表名,TheTableName)。

    public void updateDSField<T>(string fieldName, T newVal)
    {   
        // updates field in dataset

        var col = TheDataTable.Columns[fieldName];
        foreach (DataRow row in TheDataTable.Rows) row[col] = newVal; // * this marks the rows to be update by the commandtext

        // create adapter and update string
        TheAdapter.UpdateCommand = TheConn.CreateCommand();
        string newValString = newVal.ToString();
        if (typeof(T) == typeof(string)) newValString = "'" + newValString + "'";
        TheAdapter.UpdateCommand.CommandText = "UPDATE [" + TheTableName + "] SET [" + fieldName + "] =" + newValString;

        TheAdapter.Update(TheDS);  // this will only update those rows marked by step * above
    } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多