#0
by Дуб
Люди! Опять меня колбасит: решил, как умный, хоть раз по книжке пример выполнить (заполнение *.mdb из C#). Всё нарисовал, нужные имена и поля поменял на свои. И тут откуда ни возьмись, на исполнении "daCalls.Update(dsCalls.GetChanges);" (daCalls - OleDbDataAdapter, а dsCalls - DataSet) вылетает ошибка (см. название темы). Пользуюсь строкой подключения "Provider=Microsoft.Jet.OLEDB.4.0;" + @"data source = c:ats.mdb" (если имеет значение). Помогите, кто знает, плз!
#3
by Дуб
Вот полный код: DataSet dsCalls = new DataSet("Calls"); try { // определение объекта подключения OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + @"data source = c:ats.mdb"); // создание адаптера данных для выборки записей из БД OleDbDataAdapter daCalls = new OleDbDataAdapter("SELECT ID,EndCall,PeriodCall,Trunk,Number,Abonent" + " FROM tBP250", dbConn); // определение всех отображаемых столбцов DataColumnMapping dcmCallID = new DataColumnMapping("ID", "ID"); DataColumnMapping dcmCallEndCall = new DataColumnMapping("EndCall", "EndCall"); DataColumnMapping dcmCallPeriodCall = new DataColumnMapping("PeriodCall", "PeriodCall"); DataColumnMapping dcmCallTrunk = new DataColumnMapping("Trunk", "Trunk"); DataColumnMapping dcmCallNumber = new DataColumnMapping("Number", "Number"); DataColumnMapping dcmCallAbonent = new DataColumnMapping("Abonent", "Abonent"); // определение таблицы, содержащей отображаемые столбцы DataTableMapping dtmCalls = new DataTableMapping("Table", "User"); dtmCalls.ColumnMappings.Add(dcmCallID); dtmCalls.ColumnMappings.Add(dcmCallEndCall); dtmCalls.ColumnMappings.Add(dcmCallPeriodCall); dtmCalls.ColumnMappings.Add(dcmCallTrunk); dtmCalls.ColumnMappings.Add(dcmCallNumber); dtmCalls.ColumnMappings.Add(dcmCallAbonent); // активация механизма отображения daCalls.TableMappings.Add(dtmCalls); // заполнение набора данных daCalls.Fill(dsCalls); // объявление компонента построения команд для создания // SQL-инструкций создания и обновления записей OleDbCommandBuilder cb = new OleDbCommandBuilder(daCalls); // вставка новой записи в DataSet DataRow r = dsCalls.Tables["User"].NewRow; r["ID"] = 2; r["EndCall"] = 555; r["PeriodCall"] = 123; r["Trunk"] = "654"; r["Number"] = "+8995563"; r["Abonent"] = "226"; dsCalls.Tables["User"].Rows.Add(r); // вставка записи в БД daCalls.Update(dsCalls.GetChanges); // выравнивание данных в памяти по данным // из источника данных dsCalls.AcceptChanges; Console.WriteLine("В БД добавлена новая запись"); } catch (Exception ex) { // отмена изменений в DataSet dsCalls.RejectChanges; Console.WriteLine(ex.Message); }
#4
by mikecool
у датаакцеса или датасета должено быть свойство типа запрос на инсерт, упдэйт и делит...
#6
by sapphire
Попробуй закомментарить эту строку понеже dsCalls.AcceptChanges должно сделать commit транзакции.
#9
by Дуб
Кстати, dsCalls.Tables["User"].Rows.Add(r) выполняется нормально: в отладчике видна новая строка в довесок к предыдущим..
#10
by Дуб
Разобрался. Хотя, один хрен - не ясно, почему так получилось.. Если посмотреть OleDbCommandBuilder MyBuilder = new OleDbCommandBuilder(daCalls); daCalls.InsertCommand = MyBuilder.GetInsertCommand; Console.WriteLine(@"" + daCalls.UpdateCommand.CommandText); Console.ReadLine; , то он ничего не покажет. Пришлось в явном виде указать: OleDbCommand InsertCommand = new OleDbCommand; InsertCommand.CommandText = @"INSERT INTO [tBP250] ([ID],[EndCall],[PeriodCall],[Trunk],[Number],[Abonent]) VALUES .."; daCalls.InsertCommand = InsertCommand; , а уж потом daCalls.Update(dsCalls.GetChanges); Это, кстати, то, что mikecool советовал в . Спасибо! Так, вроде работает, только с подстановкой параметров @p.. разобраться надо.. А так, вроде, ничего. Спасибо всем, кто помогал.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- При отправке сообщения произошла ошибка : Общая ошибка MAPI
- Ошибка синтаксиса в инструкции UPDATE (C#)
- Странная ошибка "ошибка формата потока" с вылетом из сеанса
- Ошибка выполнения запроса "Ошибка при выполнении операции над данными: Ошибка SQL: Де
- v7: Ошибка СУБД.Внутренняя ошибка dbeng 8
- Ошибка выполнения запроса "Ошибка в ограничении доступа к данным..."
- Построение прямой по точкам C#
- При отправке сообщения произошла ошибка : Общая ошибка MAPI
- v8: Ошибка СУБД. Внутренняя ошибка компоненты DBENG8 при обмене данными
- Ошибка при попытке выгрузить данные из УТ в БП. интересная необычная ошибка
- Ошибка при вызове web-сервиса 1C 8.3 (Внутренняя ошибка. Ошибка инициализации б)
- Ошибка при вызове метода контекста (Записать) Ошибка при выполнении файловой опе
В этой группе 1С
- Увеличение размера шрифта
- СКД. Связи наборов по иерархии
- КД 2.0 : Правила переноса оборотов между 7.7 бухгалтериями
- Как в запросе поставить условие на список регистраторов?
- Транспортный налог в УПП 1.2 при УСН
- Битые ссылки в последовательности документов
- как получить значение переменной окружения операционной системы из кода 1С?
- Excel, значение ячейки по адресу?
- перенос цен из базы в базу?
- Управление автотранспортом. Нормы расхода ГСМ
- Спец-консультант по ЗУП 2.5.
- Как в документе Реализация подцепить определенную партию
- Как получить остаток от деления?
- импорт документов из ИТС в Word
- Налогоплательщик. Перс учет. Как выгрузить в хмл формате?
- Почему принтер чеков BTP-2002NP плохо печатает?
- ЗиК. Табель учёта рабочего времени. ОШИБКА
- Проблема со сканером и 8.1
- Как получить значение перечисления по ОЛЕ?
- Упаковка таблиц информационной базы