| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > ADO.net |
| Автор: Finkel 10.5.2004, 22:49 |
| хотелось бы знатьа можно вносить изменения в Бд с помощью технологии OLE DB. я просто сейчас читаю книгу по си шарпу , но в ней говорится больше о технологиях провайдера SQL |
| Автор: stron 10.5.2004, 23:24 |
| Конечно можно. Просто The Microsoft SQL Server .NET data provider рекомендуем для работы с MsSQL server 7.0+ (по идеи он должен быстрее работать, т.к. меньше ступеней при в/д) The Microsoft OLE DB .NET data provider рекомендуем для работы с MsSQL server до версии 6.5 (интересно, а им ещё кто-то пользуется???), Access'ом........... Просто OLE DB - более универсальная штука, но многие провайдеры придётся скачивать из инета |
| Автор: Kurt 11.5.2004, 00:18 | ||
| OLE DB работает медленнее, чем специализированные сборки, такие как для MSSQL. Однако OLEDB более универсальна. Вобщем, на всякий пожарный, вот тебе пример работы через OLEDB. Тока поменяй цикл, к-й вносит данные в БД, под скорость твоего компа. Здесь я реализовал все основные операции (создание таблицы, insert, select, удаление..). Вот:
Может, немного коряво, но я думаю понятно. Если что - спрашивай.. |
| Автор: Finkel 11.5.2004, 23:16 | ||||
[ разве есть такая команда в SQL ? в принцепе все практически ясно , правда половины вещей я не нашел в своей книжке Можно ли работать обьектом DataSet, а потом записывать этот обьект в бд? |
| Автор: stron 12.5.2004, 00:49 | ||||
есть!!
удаляет все строки из таблицы. |
| Автор: Kurt 12.5.2004, 19:26 | ||||
Если что - спрашивай.. Если сможем - попробуем ответить..
Не мог бы ты уточнить/перефразировать вопрос? Тебе нужно решение именно через DataSet? Я не уверен, что правильно тебя понял.. |
| Автор: Kurt 12.5.2004, 20:53 | ||||
Аааа.. Понял. Что-то я сразу не сообразил. Посмотри в сторону DataAdapter. Он есть как в OLEDB (OleDbDataAdapter), так и в SQL-сборке (SqlDataAdapter). В нем есть такие интересные методы как Fill() - заполнение DataSet из базы, а также Update() - обновление БД из DataSet. Fill() многократно перегружен, можно выбирать нужный "диапозон" записей для загрузки и т.п. Update() имеет параметры: - DataSet - string <Имя таблицы> - какую таблицу обновить.. Перед тем, как исполнять, данный метод тебе нужно определить как минимум Insert операцию. В примере, прикрепленном ниже, я показал, как это делается - тебе нужно определить входные параметры, имена столбцов, их типы и т.п. Еще в коде я использовал метод PrintTable - это просто вспомогательный метод, чтоб выводить таблицу. Для нормальной работы тебе нужна будет база - файл baza.mdb в той же директории, что и .exe, а также таблица myTable с двумя столбцами: intColumn (целочисл. столбец) strColumn (строка..). Что делает пример - открывает базу, записывает в DataSet таблицу из БД, выводит на консоль, добавляет три строки в DataSet, обновляет БД и выводит, что получилось. Вот код:
Все. Надеюсь, этот код чем-то помог. Удачи! З.Ы. Пример готов к компиляции. Можно откомпилить и запустить.. |
| Автор: Finkel 12.5.2004, 23:33 |
| фух , минут тридцать сравнивал обьявления параметров |
| Автор: Kurt 12.5.2004, 23:44 |
| Немножко не понял, что ты имеешь ввиду.. Извини, что запутал - я наоборот старался, чтоб поаккуратнее, да попроще.. |
| Автор: Finkel 13.5.2004, 22:19 |
| хм, а как можно сделать : на одной форме критерии и поиск таблицы , а результат передать в другую форму в DataGrid ? |
| Автор: Kurt 13.5.2004, 22:45 |
| Модератор: Давайте вернёмся к теме обсуждения. Если хочешь задать другой вопрос, настоятельно рекомендую создать НОВУЮ тему с соответствующим названием. Таким образом, ты привлечешь внимание тех, кто знает ответ. А также это соответствует правилам форума. 1 топик - 1 вопрос. |
| Автор: Finkel 18.5.2004, 10:35 | ||
Вот пробывал добавить в свою базу строку
возникает прирывание , в котором говорится что не инициализирована Инсерт-операция . В чем яне прав , все сделал по примеру Курта. |
| Автор: Kurt 18.5.2004, 16:05 | ||||||
Хмммм.. Да. Действительно похоже.. Однако, говоришь, не работает.. Смотрим.. Стоп! ..А ЭТО что?! Сравним две строчки кода. Твой код:
Мой пример:
Чувствуешь разницу? У тебя нету второго параметра в конструкторе! Очевидно, просто конструктор перегружен - считается, что ты определишь этот параметр позже или из еще каких-то соображений. Попробуй указать вторым параметров твой OleDbConnection cn; Как у меня в примере. Поидее, всю будет работать.. Опробуй и доложи о результатах - если нет, дальше будем искать.. Удачи! З.Ы. Попутно.. Не подумай ничего такого, но вроде вместо "Uncorrect" надо писать "Incorrect".. А, можь, и нет.. |
| Автор: Finkel 18.5.2004, 21:49 |
| Возникает ексепшн с вот таким текстом "ExceptionSystem.Data.OleDb.OleDb.Exception ошибка ситаксиса инструкции INSERT INTO, at System.Data.comon.DbDataAdapter.Update(DataRow[] dataRow,DataTableMapping tableMapping ) at System.Data.comon.DbDataAdapter.Update(DataSet dataset,String srcTable) at ..." єто опять с Инсертом как то связано? |
| Автор: Finkel 19.5.2004, 22:45 |
| может я ошибся изменив регистр букв ? Важно ли это для SQL Запроса? |
| Автор: Kurt 20.5.2004, 00:52 |
| Нет, насколько я знаю, в C#.NET это не важно. Если я найду в чем проблема - непременно скину.. З.Ы. Накрайняк, отошлешь мне весь проект.. Ессно, если ты МОЖЕШЬ/ХОЧЕШЬ это делать. Может, у тебя коммерческий проект. |
| Автор: Finkel 20.5.2004, 13:16 |
| может я не правильно использовал типы данных ? так если в Access`e я использую целое число то параметр должен быть OleDbType.Integer? двойное с плавающей точкой это OleDbType.Double строка это OleDbType.VarChar ? |
| Автор: Finkel 20.5.2004, 22:38 |
| Курт , спасибо за помощь ... я сделал через OleDbCommand и все заработало ... а вот через определение инсерт операции не полчается до сих пор . З.Ы. но уже все работает |
| Автор: Kurt 20.5.2004, 23:02 |
| Искренне рад за тебя. Вот только почему через Insert не работало.. Можь, у тебя там еще где ошибки были? Я ж весь код не видел.. Удачи! |
| Автор: Finkel 21.5.2004, 01:59 |
| у меня все таки большие подозрения ,что я не правильно определил тип парметров , которые передавались бы в таблицу . |