SqlDataAdapter更新出错
本文关键字:出错 更新 SqlDataAdapter | 更新日期: 2023-09-27 18:28:34
使用C#,SQL Server 2016-试图编写一个方法来更新数据集中的每个记录-使用DataAdapter
对象将单个字段更新为新值,并收到以下错误消息:
对于不返回任何基表信息的SelectCommand,不支持动态SQL生成。
这是我的代码(一个包含DataSet TheDS
、SQLDataAdapter TheAdapter
和DataTable 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行的内容,这是正确的吗?无论哪种方式,执行此操作的正确方式是什么?
我需要构建自己的命令字符串,因为构建器处理的行数不超过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
}