![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Я пишу на С# после Delphi. В Delphi уже все было отточено. Есть ли в ADO.NET компонент аналогичный AdoQuery. Плюс еще я мог в AdoQuery запрос задать статически, написав его в свойстве SQL. Мог также динамически, во время выполнения программы, например:
Как такое сделать в ADO.NET? |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Хм... Не знаю, правильно ли я тебя понял... но приведенный пример можно просто записать в виде строки:
, а затем уже присвоить это значение DbComand.CommandText или DbDataAdapter.SelectCommand. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
Я буду упоминать объекты SqlXXXXX, потому что с ними работаю...
Fighter, почитай про SqlCommandBuilder, удобная вещь (пример). кроме есть свойство SqlCommand.CommandText (или конструктор SqlCommand), есть конструктор
везде можно предварительно программно генерировать строку запроса... Только осторожно (Вредоносные SQL-строки ) ![]() Для динамической генерации строки текста лучше использовать StringBuilder Это сообщение отредактировал(а) tol05 - 5.7.2007, 09:07 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Спасибо, попробую. А вот еще такая тема, с запросами. Если например я использую в запросе select from то для выполнения запроса можно сделать либо AdoQuery1.Active := true либо AdoQuery1.Open. Но, если же я использую insert, update, delete то тогда тут можно использовать одну процедуру ExecSql. В ADO.NET есть что-нибудь подобное?
|
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
я не очень понимаю, что делают эти команды ![]() Есть в DataAdapter-е метод Update, который все команды выполняет ссылка есть SqlCommand.CommandType - можно задать как текст или StoredProcedure (в которой. кстати ты моешь как Select, так и Insert, Delete или Update команды прописать) Есть разные варианты выполнения команд (ExecuteNonQuery, ExecuteReader, ExecuteScalar ) и еще много чего есть ![]() в одном посте про ADО.NET не расскажешь. Надо читать книжки, даже не MSDN ... -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Для select используются одни процедуры, для DML другие. Есть ли такое разделение в ADO.NET?
|
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Все-таки, если честно, то я не разобрался. Я для себя пишу тестовый пример. БД из одной таблицы, записи требуется добавлять, удалять, изменять, очищать. Все эти действия я делал используя операторы языка. Я хотел бы делать это все чисто при помощи SQL, так как это более привычнее. Через какие компоненты нужно это делать и как нужно делать?
|
|||
|
||||
thomas |
|
||||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Fighter,
Создаем соединение с базой и ДатаСет.
А теперь пишем запрос к таблице в базе и заполнякм данными таблицу в ДатаСет
А дальше используй команды INSRT INTO, DELETE и UPDATE для манипуляций с данными.
Обновление можно сделать так
Ну вот коротенько. Успехов. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||||
|
|||||||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Блин, большое спасибо. +1 тебе. Тему я начинаю понимать, да вроде все понятно. ТОлько вот теперь гемор с обновлением. Добавляется запись. Только я её вижу только после перезагрузки. ПОчему он не удаляет данные из DataGrid при использовании Disks.Fill?
И здесь тоже есть вопрос. Как здесь вяжется dbCmd с остальными компонентами. ну, данные выбрались, а куда они делись? |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Fighter,
Привет! Ты когда создавал ДатаАдаптер dbDa = New OleDbDataAdapter(dbCmd) перед этим определил только свойство соединения dbCmd.Connection = dbCon А теперь перед выполнением метода Fill() определил и текст команды dbCmd.CommandText = sql. А метод Fill() ДатаАдаптера создает таблицу в ДатаСете и заполняет ее данными, полученными на основании запроса. Меняя sql и имена таблиц ты можешь напихать в ДатаСет сколько угодно таблиц используя один ДатаАдаптер. Это сообщение отредактировал(а) thomas - 9.7.2007, 22:40 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
А это я понимаю работает в начале работы прогарммы, перед загрузкой. Я в общем, можно сказать понял все это. Я через oledbCommand записи вставлял в таблицу (пока что изменять не пробовал, но потом попробую, думаю должно работать). А вот как обновлять, не знаю. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Fighter,
смотри три поста выше -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Я так понимаю эта часть? Если да, то можно рассказать про каждую строчку (если есть время конечно)? Чтобы на будущее было ясно что зачем, а не так, что нужно заучить этот код. Это сообщение отредактировал(а) Fighter - 10.7.2007, 09:04 |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
создаем построитель команд (чтоб самому не писать и не выполнять OleDbCommand вручную)
требуем чтобы построитель построил команду и присвоил ее команде обновления адаптера обновляем ds.Tables(tableName).AcceptChanges() я бы убрал, потому что это лишняя операция - dbDa.Update его вызывает сама ( читай тут и там еще ссылка на более ранний пост есть) Если какая-то проблема - о ней сообщаем мессаджем Это сообщение отредактировал(а) tol05 - 10.7.2007, 10:07 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
Надеюсь будет понятно.
|
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Блин, извините, совсем уж лол, себя не узнаю (хотя это мож после Delphi). Опять я загнулся на добавлении. Вот код:
Да, здесь без обновления. Но, мне хотя бы пока без обновления чтобы это все добавлялось в базу. Что же здесь не так (смысл надо оставить тем же, добавление через запросы) в реализации? Да, все объекты oledbCommand, oleDbDataAdapter - я уж пока что мышкой таскаю на форму. Пока что хватает. |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
Все должно работать, а в чем конкретно проблемма, что за ошибка?
addDisk - это внешняя форма? Если да, то лучше через свойства, а не делать компоненты public. \n - можно не писать, а вместо этого можно сделать пробел. |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
Если сервер у тебя Sql Server 2005 то используй пространство имен System.Data.SqlClient (мож для 2000-го тож подойдет, сам не пробовал).
Не рекомендую собирать sql код в коде программы, напиши лучше хранимку с параметрами и через нее работай (личное мнение). Если решишь, помогу с параметрами в ADO.NET. Я сам раньше писал на Delphi. технология ADO и ADO.NET кардинально отличаются друг от друга. В ADO.NET, все наборы данных не имеют постоянного коннекта с базой. Они локальные! А в ADO, они все связаны напрямую с базой. Поэтому в ADO.NET больше писанины для работы с базой. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Фишка в том, что он все компилит нормально. Прага запускается и при исполнении этого кода рантаймовых ошибок нет. Он просто не добавляет запись в базу. Добавлено через 40 секунд Хм... Извините, что-то меня щас на мысль толкнуло. Я думаю, что все работает. Щас проверю. Добавлено через 9 минут и 35 секунд Да, все работает. Я при создании коннекта выбрал, чтобы база у меня вместе с компиляцией копировалась в папку с экзэшником. Да, щас добавляет. Ну, буду мучить обновление. Кстати, обновление, которое было написано выше я пробовал и он все равно таблицу не обновлял. Я программу не закрывал и поэтому он новую копию базы не делал, следовательно он должен был обновить. Я вот что думаю, может быть дело такое. В моей таблице Disks есть поля (Disc_id, DIsc_Name, Disc_have, Disc_Type). Я при настройке DataAdapter'a при создании Select'a я выбрал только поля Disc_Name, Disc_Have, Disc_Type, поля Disc_id - я не выбрал. Из-за этого он при создании смог сгенерить только SelectCommand. А при обновлении используется OleDbCommandBuilder.GetUpdateCommand(). Мож он из-за этого неправильно формирует команду на обновление. |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Итак, совершенно случайно "нарвался" на рабочий вариант кода. Вот как оно вышло:
Если возможно объяснение вот этого, почему же этот вариант полностью работает. Добавляет запись в саму таблицу, да и еще DataGridView обновляет. Во, чудеса какие-то. Лана, ща дальше буду пробовать этот C#. Добавлено через 46 секунд Спасибо, как доберусь - думаю топик создам, буду ждать пока ответишь. |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
тут интересны только две строчки.
Совет: Если у тебя одна таблица, то не используй DataSet, а используй DataTable.
ds1.Disks.Clear(); - очищает все записи в наборе Disks.Fill(ds1, "Disks"); - заполняет занова нобор данных из базы так как к гриду у тебя подцеплена эта таблица, то и в гриде данные отображаются Добавлено через 3 минуты и 50 секунд Вот те две строчки, как раз это и делают |
|||
|
||||
Fighter |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Т.е. он очищает записи не в самой базе, а в наборе. А потом заново туда данные заливает. Ясно. Спасибо. Вроде все DML операции пашут. Надо будет щас попробовать выборку из 2 таблиц с ограничениями сделать. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |