|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть БД на SQL Server'е. Есть форма в C# с DataGridView и двумя кнопками: "Загрузить данные в DataGridView из БД" и "Добавить новые данные в DataGridView". Пожалуйста, скажите: 1) Каким образом грамотно работать с SQL Server'ом из C#? (Я не прошу расписывать сложные алгоритмы, так как это долго и вам нет смысла тратить на меня много время. Просто хочется услышать, что-то вроде "Лучше использовать LINQ to SQL" или "Работай с Adapter'ом, bindingSourse'ом и DataSet'ом" или может что-то ещё...) 2) Пожалуйста, скиньте рабочий кусок кода (с комментариями или без них), который реализует работу первой кнопки "Загрузить данные в DataGridView из БД". Причём, есть две таблицы в БД. Эти две таблицы (из обеих надо выбрать некоторые поля: Реклама.№, Реклама.Тип, Заказ.Месяц) надо поместить в DataGridView. 3) После того, как будет выполнен пункт №2, в DataGridView будет находиться информация из двух таблицах. Как по нажатию на кнопку "Добавить новые данные в DataGridView" сделать так, чтобы появилась форма с полями идентичными столбцам в DataGridView и после заполнения полей и нажатия на кнопку "ОК" (эту часть я могу реализовать самостоятельно), данные полей записывались в ячейки DataGridView, а также записывались в БД.(а эту часть я НЕ знаю) Примечание:(это как пример, чтобы было проще объяснить) Структура БД: Первая таблица: Реклама (№(PK), Тип, Расположение) Вторая Таблица: Заказ (№(PK), Месяц, Стоимость) Между ними связь: один-к-одному. Столбцы в DataGridView: Реклама.№, Реклама.Тип, Заказ.Месяц Это мой рабочий вариант реализации пункта №2:(не знаю насколько верно) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Заранее всем огромное спасибо! Надеюсь на вашу помощь и понимание! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 13:32 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
- Уберите ЭТО из button_click - Используйте using для sqlconnection и не только - Вам точно нужен SELECT * ? - RTFM ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 13:38 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Дмитриев Алексей, Если приложение из разряда потренироваться, то: 1) Строку соединения в конфиг. Из конфига достается через ConfigurationManager.ConnectionStrings 2) Пример работы соединениями и командами: 13780958 3) Напрямую работать с ADO.NET нежелательно, для этого используется ORM ( Пример ) 4) Про датаадаптеры, датасеты забудьте. Биндинг наше всё 5) Работу с БД уберите из формы вообще. Скиньте в отдельную сборку/класс 6) Про using(Dispose) и select * вам уже сказали ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 14:16 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79, попытаюсь собрать воедино всё, что вы посоветовали: 1) Нельзя выполнять никаких операций с БД в самой форме, при нажатии на кнопки и прочее. Как их скинуть в отдельную сборку/класс? (пожалуйста можно хотя бы минимальный пример) 2) Adapter'ы, DataSet'ы и LINQ to SQL использовать нежелательно. Все вопросы можно решить через bindingSourse. 3) Строку подключения надо убрать в "конфиг" (что это/как это?) 4) Мне надо изменить SQL-запрос, так как мой выводит все атрибуты таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 14:49 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Грубо и только в качестве наброска. Но в любом случае это гораздо лучше вашего варианта. Код: c# 1. 2. 3. 4. 5.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
App.Config: Код: xml 1. 2. 3. 4. 5. 6.
Дмитриев АлексейМне надо изменить SQL-запрос Меняйте. Как я понимаю, примеры, которые я привел, вы не посмотрели ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 15:08 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79, от всего выше сказанного легче не стало( только ещё больше вопросов. Пример по Business Logic Toolkit я прочитал. И тоже понятнее не стало. Я не понимаю последовательности действий, которую мы выполняем, и как следствие не могу разобраться. Пожалуйста, Arm79 , на пальцах попытайтесь объяснить как по этапам производится подключение SQL, подсоединение к DataGridView и т.д. Arm79 , заранее вам спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 16:17 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Умеете добавлять строку соединения в app.config? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 16:23 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
пример - набросок во вложении Скрипт таблицы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 16:46 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Дмитриев Алексей, Вы, главное, не верьте, что Arm793) Напрямую работать с ADO.NET нежелательно, для этого используется ORM ( Пример ) Рассмотрим пример. Можно и так, как описано в примере для адо. А можно через ADO и так. Используя тот пример. Код: c# 1. 2. 3. 4. 5. 6. 7.
Неправда ли короче и понятнее, чем ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 07:47 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Cat2Неправда ли короче и понятнее, чем ОРМ? Угу. Только не забудьте рассказать, что в SelectCommand и как оно там оказалось... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 11:49 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79Cat2Неправда ли короче и понятнее, чем ОРМ? Угу. Только не забудьте рассказать, что в SelectCommand и как оно там оказалось...Ну, и что не так с SelectCommand? Недостающий код Вас не затруднит привести в качестве примера аргументации? Двух строк "на все", думаю, будет достаточно... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 12:48 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Cat2Неправда ли короче и понятнее, чем ОРМ? Бррр... sphinx_mvНу, и что не так с SelectCommand? Недостающий код Вас не затруднит привести в качестве примера аргументации? Двух строк "на все", думаю, будет достаточно... Специально для тех, кто сильно ухватился за ручник - какая тебе еще нужна аргументация для захардкоженных запросов, без типизации результата, с абсолютно нулевым рефакторингом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 12:57 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mvArm79пропущено... Угу. Только не забудьте рассказать, что в SelectCommand и как оно там оказалось...Ну, и что не так с SelectCommand? Недостающий код Вас не затруднит привести в качестве примера аргументации? Двух строк "на все", думаю, будет достаточно... мне лень копи-пастить мсдн. общий смысл состоит в том, что в select комманд также присваивается SqlCommand (руками или дизайнером) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 12:58 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79sphinx_mvпропущено... Ну, и что не так с SelectCommand? Недостающий код Вас не затруднит привести в качестве примера аргументации? Двух строк "на все", думаю, будет достаточно... мне лень копи-пастить мсдн. общий смысл состоит в том, что в select комманд также присваивается SqlCommand (руками или дизайнером)А Вы бы все-таки не поленились и проаргументировали свое видение "общего смысла" примерами кода для ADO.NET. И рядышком (тоже сугубо для примера) все то же самое на любом из доступных Вам ORM - хоть "руками", хоть "дизайнером". Хотя с примером для ADO.NET я Вам помогу - настучу на клавиатуре недостающие 2 (две) строки, которых "не хватало". Это выглядит примерно как-то вот так: Код: c# 1. 2.
Итого - вместе с декларацией метода и уже приведеным для него кодом - целых 7 (семь) строк. Но уж с ORM-то Вы как-нибудь постарайтесь продемонстрировать "простоту и легкость". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:16 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mv, Вы бы пример по ссылочке прочитали: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Для списка вместо ExecuteObject используется ExecuteList Как видите, в паре строчек и коннект с базой, и параметризированный запрос, и маппинг объектов, и типизация результата. Профит везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:26 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:41 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mv, а в чем заморочки, при использования орм, сценарий у всех один Код: c# 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. 27.
костяк работы, наврядли изменится в ближайшее время.. три строчки ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:42 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Где-то в степиsphinx_mv, а в чем заморочки, при использования орм, сценарий у всех один Заморочки в его неопытности. В остальном всё хорошо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:43 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79sphinx_mv, Вы бы пример по ссылочке прочитали: :) Вы не поверите! Я его ПОЛНОСТЬЮ видел! Arm79 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Для списка вместо ExecuteObject используется ExecuteList Как видите, в паре строчек и коннект с базой, и параметризированный запрос, и маппинг объектов, и типизация результата. Профит везде.С учетом того, что для работы с экземпляром класса и списком экземпляров нужны разные методы - смело умножаем на два. И Вы точно ничего не "забыли"? Где описание класса Person ? Или Вы предполагаете, что ваш код "из двух строчек" без нее будет работать? И (как тут некотрые, типа, "намекают") совершенно без ручного рефакторинга в случае изменения запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 13:51 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mvИ Вы точно ничего не "забыли"? Где описание класса Person ? Или Вы предполагаете, что ваш код "из двух строчек" без нее будет работать? И (как тут некотрые, типа, "намекают") совершенно без ручного рефакторинга в случае изменения запроса? Про автогенерацию классов по схеме БД рассказывать, бестолочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 14:01 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mv, Уважаемый, воинствующий фанатизм не к лицу никому. Я со свой стороны привел пример на BLToolkit, максимально приближенный к ADO.NET, чтобы явно неопытный топикстартер хоть-что то понял. И BLT также совершенно без ручного рефакторинга может работать. И у BLT есть вполне себе реализованный LINQ-провайдер . sphinx_mvдля работы с экземпляром класса и списком экземпляров нужны разные методы - смело умножаем на два Смело умножайте на 2 ваше невежество. Чем вам мешает список из одного элемента? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вам привели код из BLT, Entity Framework, NHibernate. Везде кода минимум. Если вы не умеете пользоваться ОРМ, это не значит, что они плохие. Это значит - вам учиться и учиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 14:09 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79sphinx_mv, Уважаемый, воинствующий фанатизм не к лицу никому. Та такой там воинствующий, это унылый фрик :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 14:25 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
Arm79sphinx_mv, Уважаемый, воинствующий фанатизм не к лицу никому. Улыбнуло... Arm79Я со свой стороны привел пример на BLToolkit, максимально приближенный к ADO.NET, чтобы явно неопытный топикстартер хоть-что то понял. Вот мне и интересно: с какой целью Вы пытаелись скрыть (типа, "за ненадобностью") при сравнении с ADO.NET от "явно неопытного топикпастера" необходимость реализации одного из ключевых моментов в Вашем примере, без чего пример становится физически неработотспособен? Arm79Вам привели код из BLT, Entity Framework, NHibernate. Везде кода минимум. Вы сравниваете ваш "минимум кода" с ADO.NET и у Вас получилось компактнее?! Линейку подкорректировать не пробовали? Arm79Если вы не умеете пользоваться ОРМ, это не значит, что они плохие. Это значит - вам учиться и учиться.Это означает, что мне совершенно перпендикулярна фанатичная вера некоторых "специалистов" в то, что "ORM спасет мир". На самом деле, использование ORM - попытка скрыть недостаток знаний реляционных СУБД введением дополнительных уровней абстракций. Оно же - сокрытие под наслоениями кило/мегабайтов бесполезного кода личной некомпетентности програмистов-ORMщиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 18:31 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
МСУsphinx_mvИ Вы точно ничего не "забыли"? Где описание класса Person ? Или Вы предполагаете, что ваш код "из двух строчек" без нее будет работать? И (как тут некотрые, типа, "намекают") совершенно без ручного рефакторинга в случае изменения запроса? Про автогенерацию классов по схеме БД рассказывать, бестолочь? Расскажите... Или спойте... Я уже запасся пивом и попкорном... Вот Вам пример элементарного запроса для одного из самых распрастраненных промышленных серверов БД: Код: plsql 1.
Вот Вам таблица: Код: plsql 1. 2. 3. 4. 5. 6.
Вот Вам один пользовательский тип данных: Код: plsql 1.
Вот Вам второй пользовательский тип данных: Код: plsql 1. 2. 3. 4. 5.
Хочу работающую "автогенерацию" классов - в Вашем личном исполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 18:38 |
|
Данные таблиц из SQL в DataGridView
|
|||
---|---|---|---|
#18+
sphinx_mvЭто означает, что мне совершенно перпендикулярна фанатичная вера некоторых "специалистов" в то, что "ORM спасет мир". На самом деле, использование ORM - попытка скрыть недостаток знаний реляционных СУБД введением дополнительных уровней абстракций. Оно же - сокрытие под наслоениями кило/мегабайтов бесполезного кода личной некомпетентности програмистов-ORMщиков. Улыбнуло :-) Учитывая, что я как раз таки SQL-программист. sphinx_mvВот мне и интересно: с какой целью Вы пытаелись скрыть (типа, "за ненадобностью") Я честно просмотрел код и до сих пор не пойму, что именно я попытался скрыть? sphinx_mv, я начинал с Delphi (c 3 по 7 версию), потом перешел на 2005 студию. Последние несколько лет я занимаюсь MS SQL и приложениями c# под него. И когда речь идет о работе непосредственно с таблицами в обход типизированных данных и ОРМ, я понимаю о чем речь. И с учетом МОЕГО опыта работы с БД я нахожу использование ОРМ гораздо более удобным и качественным. По поводу автогеренации. Я дружу с MS SQL, уж не взыщите: 1) две таблицы + отношения между ними master-detail 2) все классы сгенерированы автоматом, при генерации модели из БД 3) Для BLT (ниже я для Entity Framework указал) автогенерация может осуществляется, к примеру, утилитой http://code.google.com/p/bltutilsvspackage/ или шаблоном http://www.mygenerationsoftware.com/TemplateLibrary/Template/?id=a1e54825-1926-43aa-8b1f-1addbab63b30 Код: sql 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. 27. 28.
Код: c# 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. 27. 28. 29. 30. 31.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Код: c# 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. 27. 28.
Удачного вам вечера :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 19:17 |
|
|
start [/forum/topic.php?fid=20&msg=38127329&tid=1404730]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
91ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 194ms |
0 / 0 |