Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление OleDB / 9 сообщений из 9, страница 1 из 1
30.10.2007, 12:55
    #34904376
kinolog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
Привет всем! Совсем недавно стал изучать ADO.NET, и никак не могу разобраться как обновлять данные в бд. Помогите разобраться. Заранее спасибо!

Вообщем у меня есть таблица 'Задания', Состоящее и з 8 полей. Основные 'ID' и 'Имя'.
именно эти поля мне нужно изменить.

Вот процедура создания команд:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 
Private Sub CreateCommands()        
        Dim TI As Int32 = ComboTables.SelectedIndex
        Dim cmUpdate As OleDb.OleDbCommand
        Dim cmDelete As OleDb.OleDbCommand
        Dim cmInsert As OleDb.OleDbCommand

        cmUpdate = New OleDb.OleDbCommand( _
            "UPDATE " & ComboTables.Items(TI) & " SET ID = ?, Имя = ? " & _
            "WHERE ID = ?")
        cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@ID", OleDb.OleDbType.Integer,  10 , "ID"))
        cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@Имя", OleDb.OleDbType.VarChar,  50 , "Имя"))
        cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@oldID", OleDb.OleDbType.Integer,  10 , "ID")).SourceVersion = DataRowVersion.Original

        cmDelete = New OleDb.OleDbCommand( _
            "DELETE FROM " & ComboTables.Items(TI) & " WHERE ID = ?")
        cmDelete.Parameters.Add(New OleDb.OleDbParameter("@ID", OleDb.OleDbType.Integer,  10 , "ID")).SourceVersion = DataRowVersion.Original

        cmInsert = New OleDb.OleDbCommand( _
            "INSERT INTO " & ComboTables.Items(TI) & " (ID, Имя) VALUES (?, ?)")
        cmInsert.Parameters.Add(New OleDb.OleDbParameter("@ID", OleDb.OleDbType.Integer,  10 , "ID"))
        cmInsert.Parameters.Add(New OleDb.OleDbParameter("@Имя", OleDb.OleDbType.VarChar,  50 , "Имя"))
        dbAdapter.UpdateCommand = cmUpdate
        dbAdapter.DeleteCommand = cmDelete
        dbAdapter.InsertCommand = cmInsert
End Sub

Далее процедура обновления.

Код: plaintext
1.
2.
3.
4.
            datas.Tables(TI).Rows(SelectOrder).Item( 2 ) = "Мое значение" ' изменение поля Имя
            dbAdapter.Update(datas)
            datas.AcceptChanges()
            dbCon.Close()

Update выбивает ошибку:

Update requires the UpdateCommand to have a connection object. The Connection property of the UpdateCommand has not been initialized.
...
Рейтинг: 0 / 0
30.10.2007, 13:33
    #34904543
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
а вы тест ошибки сами читали?

коннекшины у команд за вас кто будет инициализировать?
...
Рейтинг: 0 / 0
31.10.2007, 14:59
    #34907846
kinolog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
Спасибо! С этим разобрался.

Однако возник еще один вопрос:
Можно ли узнать тип необходимого поля (OleDbType) а также его размер.
Если да то как?
...
Рейтинг: 0 / 0
31.10.2007, 15:05
    #34907882
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
kinologСпасибо! С этим разобрался.

Однако возник еще один вопрос:
Можно ли узнать тип необходимого поля (OleDbType) а также его размер.
Если да то как?
у кого узнать и кому необходимому?
...
Рейтинг: 0 / 0
31.10.2007, 15:22
    #34907938
kinolog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
Поясню подробнее:
Я хочу создать класс работы с базой данных через OleDb.
Класс должен осуществлять чтение и запись данных в БД.
Чтение данных я уже сделал. А как осуществить запись я не знаю.
Ведь для записи необходио знать имя поля его тип и размер,
для того чтобы затем создать параметры командам UpdateCommand, InsertCommand и DeleteCommand.
База заведомо не известна.

Поетому я и спрашиваю можно ли узнать тип и размер поля.
Причем тип - OleDbType.
...
Рейтинг: 0 / 0
31.10.2007, 15:29
    #34907974
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
авторБаза заведомо не известна
и структура, как я понимаю - тоже?
автор Совсем недавно стал изучать ADO.NET
... и давай сразу строчить вечное, доброе (читай - универсальное), да?

что не получается после чтения?
...
Рейтинг: 0 / 0
31.10.2007, 15:47
    #34908043
kinolog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
Чтение у меня получилось. А запись данных не совсем.
И как раз таки структуру бд я смог получить. Но это мне не помогло, т.к. там не было не типов полей, не их размеров.

Проще говоря мне нужно создать правильный запрос на обновление, вставку и удаление данных.
Если бы мне были известны все типы и размеры полей, то запрос выглядел бы так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cmUpdate = New OleDb.OleDbCommand( _
            "UPDATE Таблица1 SET Номер = ?, Имя = ?, " + _
            "Описание = ? WHERE ID = ?", dbCon)

cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@Номер", OleDb.OleDbType.Integer,  5 , "Номер"))
cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@Имя", OleDb.OleDbType.VarChar,  50 , "Имя"))
cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@Описание", OleDb.OleDbType.LongVarChar,  1000 , "Описание"))

cmUpdate.Parameters.Add(New OleDb.OleDbParameter("@oldID", OleDb.OleDbType.Integer,  5 , "ID")).SourceVersion = DataRowVersion.Original

dbAdapter.UpdateCommand = cmUpdate
...
Рейтинг: 0 / 0
31.10.2007, 16:05
    #34908112
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
авторИ как раз таки структуру бд я смог получить. Но это мне не помогло, т.к. там не было не типов полей, не их размеров.

не знаю, что и как и где вы получали....
но описания полей можно пполучит из полученной DataTable, например...
table.Columns(0).DataType, table.Columns(0).MaxLength
и т.д.
...
Рейтинг: 0 / 0
31.10.2007, 16:07
    #34908122
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление OleDB
+ я на вашем месте почитал бы о методе GetSchema OleDbConnection
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление OleDB / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]