ADo.NET Удаление записей
От: Gudzik Германия  
Дата: 26.03.06 14:16
Оценка:
Мне нужно удалить из все записи из таблицы.
Попытка удалить хотя бы один рядок вызывает следующую ощибку:

"Dynamic SQL generation for the DeleteCommand is not supported against
a SelectCommand that does not return any key column information."

Вот код, который я использую:


// (1) Создать соединение с источником данных.
SqlConnection Connection = new SqlConnection("server=(local); database=" + DataBaseName + "; Trusted_Connection=yes");
// (2) Создать объект адаптера данных.
SqlDataAdapter Adapter = new SqlDataAdapter();
// (3) Создать набор данных.
DataSet DatSet = new DataSet();
DataRow Row;
    
SqlCommandBuilder CommandBuilder = new SqlCommandBuilder(Adapter);

Adapter.SelectCommand = new SqlCommand("SELECT * FROM data", Connection);
Adapter.Fill(DatSet, "data");
Row = DatSet.Tables["data"].Rows[0];
Row.Delete();
Adapter.Update(DatSet.Tables["data"]);


Таблица "data" имеет три поля, не имеет ключевых полей.
Подскажите пожалуйста где ошибка и зачем нужно использовать свойство DeleteCommand класса SqlDataAdapter?
Спасибо.
Re: ADo.NET Удаление записей
От: Closer  
Дата: 26.03.06 15:38
Оценка:
Здравствуйте, Gudzik, Вы писали:

G>Таблица "data" имеет три поля, не имеет ключевых полей.


А что тебе мешает завести ещё одно поле и сделать его ключевым? Думаю после этого ошибка исчезнет. Да и иметь в таблице поле которое однозначно идентифицирует запись это хороший тон.

G>Подскажите пожалуйста где ошибка и зачем нужно использовать свойство DeleteCommand класса SqlDataAdapter?


DeleteCommand. В этом свойстве у SqlDataAdapter хранится информация об SQL комманде которая вызывается для удаления записи. Если самому лень писать такую комманду то можешь воспользоватся классом SqlCommandBuilder (кажись так, правда не всегода он отрабатывает идеально) и с помошью его методов на основании указанного Select запроса он может построить соответствующие Insert и Delete команды которые затем можно использовать в SqlDataAdapter.
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re: ADo.NET Удаление записей
От: Решетин Россия  
Дата: 27.03.06 08:09
Оценка:
Здравствуйте, Gudzik, Вы писали:

G>Мне нужно удалить из все записи из таблицы.


Чтобы удалить все записи из таблицы читать их на клиенте не обязательно. SqlDataAdapter, соответственно, ни к чему. Достаточно SqlConnection и SqlCommand.
Что-то вроде:

SqlConnection Connection = new SqlConnection("server=(local); database=" + DataBaseName + "; Trusted_Connection=yes");
SqlCommand Cmd= new SqlCommand(commandText,"delete from data");
Cmd.CommandType = CommandType.Text;
int Recs = Cmd.ExecuteNonQuery();
Re: ADo.NET Удаление записей
От: vepd  
Дата: 27.03.06 08:28
Оценка:
Здравствуйте, Gudzik, Вы писали:

...

G>Таблица "data" имеет три поля, не имеет ключевых полей.

...

Если пользоваться SqlCommandBuilder, то имеено здесь. Без ключевого поля в таблице SqlCommandBuilder ничего не делает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.