C# SqlDataAdapter更新出错

C# SqlDataAdapter更新出错,c#,sql-server,sqlconnection,C#,Sql Server,Sqlconnection,使用C#,SQL Server 2016-尝试编写一个方法来更新数据集中的每个记录-将单个字段更新为新值-使用DataAdapter对象,我收到以下错误消息: 对于不返回任何基表信息的SelectCommand,不支持动态SQL生成 这是我的代码(一个类上的方法,该类包含数据集TheDS、SQLDataAdapter TheAdapter和数据表TheDataTable): public void updateDSField(字符串字段名,T newVal) { //更新数据集中的字段 SqlC

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

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

这是我的代码(一个类上的方法,该类包含
数据集TheDS
SQLDataAdapter TheAdapter
数据表TheDataTable
):

public void updateDSField(字符串字段名,T newVal)
{
//更新数据集中的字段
SqlCommandBuilder=新的SqlCommandBuilder(适配器);
var col=数据表列[fieldName];
foreach(datatable.Rows中的DataRow行)row[col]=newVal;
TheAdapter.UpdateCommand=builder.GetUpdateCommand();
自适应更新(TheDS);
}   

我读到一些关于SqlCommandBuilder无法处理>1000行的信息-是这样吗?不管怎样,执行此操作的正确方法是什么?

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

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

public void updateDSField(字符串字段名,T newVal)
{   
//更新数据集中的字段
var col=数据表列[fieldName];
foreach(datatable.Rows中的DataRow行)row[col]=newVal;//*这标记了要由commandtext更新的行
//创建适配器和更新字符串
TheAdapter.UpdateCommand=TheConn.CreateCommand();
字符串newValString=newVal.ToString();
如果(typeof(T)==typeof(string))newValString=“””+newValString+“””;
TheAdapter.UpdateCommand.CommandText=“更新[”+TheTableName+”]集[“+fieldName+”]=”+newValString;
TheAdapter.Update(TheDS);//这将只更新上面步骤*标记的行
} 

真的不清楚你想在这里做什么。@Rahul-编辑了这篇文章;希望这更清楚一点。
    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);
    }   
    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
    }