Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.33.41] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Не могу понять, почему не добавляются записи в таблицу. Делаю по примеру в MSDN, на ни ошибок не выскакивает, ни записи не добавляются в базу. Что я делаю не так? da = new OleDbDataAdapter("SELECT * FROM Users", Conn); ds = new DataSet(); da.Fill(ds, "Users"); DataTable workTable = ds.Tables[0]; DataRow newRow = workTable.NewRow(); newRow["uid"] = 1; newRow["Login"] = "111"; workTable.Rows.Add(newRow); newRow.AcceptChanges(); Conn.Close(); |
Сообщ.
#2
,
|
|
|
Попробуй сделать da.Update(ds);
Но я не уверен, поскольку сам не пробовал |
Сообщ.
#3
,
|
|
|
2005fs дело говорит. Именно da.Update(ds) выдаст запросы на Update/Insert/Delete в базу. А вот строчку туцКщц.AcceptChanges убери, иначе адаптер посчитает строку не требующейй обновления
|
Сообщ.
#4
,
|
|
|
Цитата andrey @ da.Update(ds) Сделал da.Update(ds, "Users") Получил "Update requires a valid InsertCommand when passed DataRow collection with new rows." Без INSERT-а никак нельзя обойтись, что-ли? Мне его несложно написать, просто не могу врубиться в логику работы с БД в шарпе. После Дельфи многое кажется неудобным, пробую себя переубеждать |
Сообщ.
#5
,
|
|
|
Адаптер состоит из InsertCommand, DeleteCommand, UpdateCommand, SelectCommand. Когда ты вызвал -
Цитата Shaden @ da = new OleDbDataAdapter("SELECT * FROM Users", Conn); ты проинициализировал только select. Остальные нужно инициализировать тоже. когда ты вызываешь Цитата Shaden @ da.Update(ds, "Users") адаптер анализирует DataRowState в строках и решает какую команду применять. Почитай что-то о ADO.NET |
Сообщ.
#6
,
|
|
|
Цитата PIL @ ты проинициализировал только select. Остальные нужно инициализировать тоже. когда ты вызываешь А это для чего? Суть вся в том, чтобы сделать изменения в базу только с помощю изменений в датасете, не делая sql-запросы на это. Нужно прсото задействовать SqlCommandBuilder: SqlCommandBuilder myBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(dsAutosList, "autos_list"); И еще: в таблице базы данных для которой вносиш изменения обязательно должен быть первынный ключ, иначе будет ексцепшн |
Сообщ.
#7
,
|
|
|
Цитата 2005fs @ - Нужно прсото задействовать SqlCommandBuilder: 2005fs, это самый простой вариант, который появился в 2.0. Кроме того, если использовать для вышеуказанных операций хранимые процедуры - прийдется писать ручками Цитата 2005fs @ - а ты думаешь адаптер не юзает запросы? Или ты думаешь что SqlCommandBuilder тебе их не генерит? изменения в базу только с помощю изменений в датасете, не делая sql-запросы на это. |
Сообщ.
#8
,
|
|
|
2 2005fs. Да-да-да! Я как раз задействовал именно его, SqlCommandBuilder и все заработало, спасибо
Добавлено Вопрос решен, спасибо всем. |