2015-12-30 2 views
0

Использование C#, SQL Server 2016 - Попытка написать метод, чтобы обновить все записи в наборе данных - одно поле для нового значения - с помощью DataAdapter объекта, и я получаю следующее сообщение об ошибке:Ошибка с SqlDataAdapter Update

Динамическая генерация SQL не поддерживается с помощью SelectCommand, которая не возвращает информацию о базовой таблице.

Вот мой код (метод на классе, содержащем 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 строк чтения - это верно? В любом случае, каков правильный способ выполнения этой операции?

+0

Это действительно неясно, что вы пытаетесь сделать здесь. – Rahul

+0

@Rahul - отредактировал сообщение; надеюсь, что это немного яснее. – dashnick

ответ

0

Мне нужно было создать собственную командную строку, так как строитель не обрабатывает более 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 
    } 
Смежные вопросы