SqlDataAdapter更新出错

本文关键字:出错 更新 SqlDataAdapter | 更新日期: 2023-09-27 18:28:34

使用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行的内容,这是正确的吗?无论哪种方式,执行此操作的正确方式是什么?

SqlDataAdapter更新出错

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

C#数据表更新多行

让我放心。(假设我也知道表名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
    }