fheyn Ответов: 5

Адаптера.Update() не работает


привет,

я использую visual c# 2008 xpress, sql srver 2005 xpress
набор данных-это ItemDataDS

вот что я делаю :

SA.ItemDataDSTableAdapters.tblItemDataTableAdapter taItemData;
ItemDataDS ds = new ItemDataDS();
DataTable dt = ds.Tables[tablename];


я создаю и заполняю массив объектов ao и делаю : dt.LoadDataRow(ao,true);
когда я проверяю ds (debug), я нахожу таблицу, и в таблице я нахожу данные

наконец я это делаю :
taItemData.Update(ds);


это делается без ошибок и ошибок, но когда я проверяю db-таблицу, никакие данные не были записаны

методы tableadapters insert-, update-, select - и delete-работают так же, как я добавил и обновил одну запись с помощью конструктора наборов данных.
метод fill() также работает, потому что эту запись можно увидеть в ds.

есть какие-нибудь предложения, что я делаю неправильно или что я могу сделать, чтобы проанализировать проблему ?
заранее спасибо

[no name]

Предоставьте весь код !

5 Ответов

Рейтинг:
2

Muthuraja Irullandi

Привет,

Возможно, Вам потребуется установить команду insert, update и delete для вашего dataadapter.

SqlCommandBuilder cmdbuilder;
cmdbuilder = new SqlCommandBuilder(dataAdapt);
 

dataAdapt.DeleteCommand = cmdbuilder.GetDeleteCommand(true);
dataAdapt.UpdateCommand = cmdbuilder.GetUpdateCommand(true);
dataAdapt.InsertCommand = cmdbuilder.GetInsertCommand(true);



с уважением
Мутураджа


fheyn

я не использую dataAdapter

Рейтинг:
2

Mousavinezhad

У меня такая же проблема и я могу сказать:

просто не использовать метод tableadapter метод acceptchanges


мой vb.код в vs 2008

Dstrading.TImpMabna.Rows.Add(k)

 Dstrading.TImpMabna.AcceptChanges()

 Me.Validate()
 Me.BsTImpMabna.EndEdit()


   TaTImpMabna.Update(Me.Dstrading.TImpMabna)

   Me.TableAdapterManager.UpdateAll(Me.Dstrading)


CHill60

Причины моего понижения голоса:
- ОП уже указала на проблему с акцептом изменений флаг</>.
- Вы противоречите себе, говоря "не используйте" этот метод, а затем публикуете решение, которое использует этот метод
- Вопрос был помечен как C#, и вы опубликовали решение VB

Рейтинг:
17

fheyn

это и есть решение проблемы :

dt.LoadDataRow(ao,FALSE);

если флаг AcceptChanges установлен в TRUE, обновления не происходит !

не обращайте внимания на сообщение доски объявлений

я не сам ее разгадал !


Рейтинг:
1

fheyn

извините, но это не очень помогает.
все это происходило семь или восемь раз за последние десять дней.
сегодня утром я построил новый тестовый проект с нуля, и он столкнулся с той же проблемой.
в БД уже есть некоторые данные, и я могу получить их без каких-либо проблем, но я не могу ни вставить, ни обновить (удалить я еще не пробовал, держу пари, что удаление сработает).

Mehdi Gholam

Начните с образца, который работает, а затем сравните свою работу с этим.

Рейтинг:
0

Winston Madiano

Возможно, вы захотите использовать sqlcommandbuilder.
экс:

SqlDataAdapter m_DataAdapter;           /* data adapter */
ItemDataDS ds = new ItemDataDS();       /* dataset */
DataTable dt = ds.Tables[tablename];    /* datatable */
SqlCommandBuilder m_ComBuilder;         /* command builder */

private void LoadData()                 /*populate your dataset*/
{
 m_DataAdapter = new SqlDataAdapter("Select ... from ..",Connection)
 m_DataAdapter.Fill(ds.Tables[tablename]);
}


... добавьте строку или внесите изменения в свой datatable

private void SaveChanges()              /* Save all changes made */

{
m_ComBuilder = new SqlCommandBuilder(m_DataAdapter);
   m_DataAdapter.Update(ds.Tables[tablename]);
}