|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|||||||||||
Загрузка базы данных SQL в чистый DataSet со всеми ключами и связями17.04.2019, 05:36. Показов 4789. Ответов 38
Метки нет (Все метки)
Привет всем!
Помогите, пожалуйста, решить проблему... Вот таким образом я загружаю в пустой DataSet все таблицы из базы данных MS SQL:
Спасибо!
0
|
|||||||||||
| 17.04.2019, 05:36 | |
|
Ответы с готовыми решениями:
38
Обновление DataSet при изменение базы данных в SQL Server Как обновить dataset после изменения структуры базы данных сервере sql |
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 06:59 | |
|
Vinemax, для чего это нужно? Какая конечная цель преследуется?
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 07:13 [ТС] | |
|
Usaga, конечная цель в том, что мне заказали три варианта программы, для MS SQL, для MySQL и для просто локальной однопользовательской работы, будь то SQLite или простое хранение данных посредством DataSet.WriteXml / ReadXml. То есть, суть в том, что вся работа идет с DataSet и его DataTable'ами, а к ним я уже прикручиваю соответствующие СУБД адаптеры. И вот, как я вам вчера писал в предыдущей своей теме, база у них уже готова, и по этой базе их старой программой наработаны тысячи их клиентов. То есть, сейчас мне важно, чтобы DataSet моей программы был точь в точь, как их база, хотя бы по ключам. Вручную искать и ставить ключи, это уйма мороки, там сотни таблиц больших и маленьких у них. Благодаря вашим подсказкам вчера я успешно копирую таблицы, их поля и типы полей MS SQL базы в набор данных моей программы, но вот надо бы еще всё остальное скопировать, если оно там есть. Ключи точно есть, возможно еще связи какие-то...
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 07:24 | |
|
Vinemax, это неправильный подход. Очень.
Не надо тут использовать DataSet'ы. Это просто неудобно. Возьмите Entity Framework 6 (не Core!) или, что ещё лучше, Linq2Db.У вас будут для каждой таблицы по классу. По этим классам данные ORM будут строить запросы. Причём, диалект языка будет выбираться исходя из того, к какой СУБД вы подключаетесь (и какой провайдер\поставщик используете). Описание таблиц (классы "моделей") и запросы никак не будут различаться и будут едиными для всех типов СУБД. Трансляция будет производиться силами самих ORM. Внешние (и не очень) ключи будут корректно учитываться. Вам не нужна вся это адская морока с DataSet'ами, INFORMATION_SCHEMA'ми и прочим низкоуровневым крапом.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 07:37 [ТС] | |
|
Usaga, с тем, что вы описали я, честно говоря, совсем не знаком и сейчас времени на то, чтобы с этим разобраться у меня попросту нет, сроки горят. Я всегда работал с базами именно через DataSet'ы. А INFORMATION_SCHEMA и вообще тот код, что я привел здесь, это всё одноразово именно для сохранения набора данных для проекта и последующего его подключения к DataSet. Мне сейчас главное именно вот так одноразово создать точную копию их базы MS SQL в наборе данных .xsd. Все таблицы я перенес (на скрине), а вот остальное как, в частности, ключи? )
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|||||||
| 17.04.2019, 07:53 | |||||||
|
Для EF6 и Linq2Db есть целые генераторы (Database First) моделей, которые по существующей базе вам и контекст сгенерируют и модели (классы-проекции таблиц) и связи между ними нарисуют. Производительность труда просто взлетает до небес. Если у вас есть время, чтобы такой ерундой заниматься вручную (выгружать метаданные схемы базы, чтобы вручную с ней потом возиться), то у вас есть время, чтобы изучить (в достаточно мере) EF6 или Linq2Db (ещё проще). Работа с классами, генерация запросов на нужных диалектах, автогенерация модели данных по схеме базы... DataSet'ы рядом не стояли ни по удобству разработки, ни по скорости, ни по надёжности. Добавлено через 4 минуты Vinemax, просто примера ради, в этой теме я выкладывал код минимального примера работы с Linq2Db. Вот он: Кликните здесь для просмотра всего текста
Подключение к SQL Server, где одна таблица UserAccess с одной колонкой ID. Обратите внимание, насколько просто. Никаких схем, DataSet'ов, голых SQL-запросов. Смена типа СУБД производится заменой имени поставщика к конструкторе контекста (ProviderName.SqlServer).Добавлено через 1 минуту Научить этот кода работать с MySQL просто: нужно заменить ProviderName.SqlServer на ProviderName.MySQL и всё. Больше ничего. Весь код останется тем же.
1
|
|||||||
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 08:11 [ТС] | |
|
Usaga, спасибо большое! Попробую разобраться сейчас... Если позволите, что-то спрашивать у вас еще, возможно, буду? )
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 08:12 | |
|
Vinemax, да, я для этого тут и нахожусь. Ну ещё в срачи поввязываться.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 08:13 [ТС] | |
|
Ну вот, собственно вопрос... )) А как создать классы из уже имеющихся таблиц SQL Server'а ? Опять же, автоматически, бо таблиц очень много...
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 08:19 | |
|
Vinemax, если речь о Linq2Db, то у них есть инструкция. Всё сводится к установке NuGet-пакетов специальных с T4 шаблонами, которые и сгенерят все нужные вам классы.
У EF 6 есть встроенные в студию мышкотыкательные средства. Добавлено через 1 минуту Cгенерированные модели (в случае обеих ORM) могут быть не совсем точными и потребовать небольшого ручного уточнения. Но это ерунда.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 09:07 [ТС] | |
|
А какую платформу нужно выбрать для своего приложения, чтобы работала linq2db ? .NET Framework 4.0 ошибку выдает при установке...
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 09:27 | |
|
Vinemax, .NET Framework 4.5 и выше. Зачем вам .NET Framework 4.0? Ему уже сто лет в обед.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 10:34 [ТС] | |
|
Usaga, а не подскажете, как именно сгенерировать класс на основе базы SQL Server ? В LinqToDB.Templates\CopyMe.SqlServer.tt вроде всё подробно, но вот так делаю, а ничего не выходит... Его может быть как-то запускать нужно или что?
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 10:41 | |
|
Vinemax, почитайте документацию, пожалуйста. Там всё расписано. Я по ней делал когда-то, у меня получилось с первого раза.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 10:52 [ТС] | |
|
Usaga, ну только один подвопросник… Пространство имен на основе базы формируется при компиляции моего проекта после всех настроек?
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 11:07 | |
|
Vinemax, какое пространство имён? О чём речь?
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
|
| 17.04.2019, 12:33 [ТС] | |
|
Не правильно выразился... ) Я вообще правильно понял, что после выполнения того, что описано в файле CopyMe.SqlServer.tt на выходе получится .cs-файл, соответствующий моей базе данных?
Добавлено через 3 минуты Я просто из документации не могу понять что нужно, чтобы выполнить / запустить этот скрипт из LinqToDB.Templates… Где должен находиться мой уже отредактированный .tt-файл... Добавлено через 1 час 16 минут Usaga, помогите, пожалуйста! С меня могарыч по завершению работы над программой! Не шучу. Суть linq2db я понял. Действительно очень просто. Не понял только самое простое, хоть и документацию перекопал... Установил в свой проект из NuGet собственно linq2db и linq2db.SqlServer... В папке проекта, да и в самой папке packages появилась папка LinqToDB.Templates… В этой папке есть обычный текстовый файл CopyMe.SqlServer.tt, в котором довольно понятно написано что нужно сделать... Мне только не понятно, когда я его отредактировал (вписал ConnectionString к моей базе, поправил файл app.config с ConnectionString моей базы в проекте), дальше что делать, чтобы сформировались классы моей базы? Просто построить проект? Ничего не происходит. Намекните хотя бы, пожалуйста, уже четыре часа мучаюсь, не соображу...
0
|
|
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|
| 17.04.2019, 13:21 | |
|
Vinemax, надо:
* создать папку под файлы модели * создать там пустой файл *.tt (название сами придумайте, главное - расширение) * скопируйте содержимое CopyMe.SqlServer.tt * задайте строку подключения внизу файла * СОХРАНИТЕ его По сохранению, студия запустит исполнение этого темплейта, а тот родит вам файл с всеми классами отражающими таблицы, а так же контекст и кучку разных хелперов. Всё, больше ничего не нужно. В папке LinqToDB.Templates лежать разные темплейты для донастройки процесса генерации. Можно указать не складывать все классы в один файл, а раскидать по разным, к примеру.
1
|
|
|
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
|
||
| 17.04.2019, 13:28 [ТС] | ||
|
Добавлено через 1 минуту Может быть мы с вами сейчас на разных языках говорим... У меня проект на VB... Добавлено через 1 минуту Создаст C#, это понятно, то не проблема...
0
|
||
|
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
|
|||||||
| 17.04.2019, 14:17 | |||||||
|
Добавлено через 56 секунд Причём, я не уверен, что у вас всё нормально работать будет, если у вас какая-то лютая древность в виде VS 2010... Добавлено через 24 минуты Я ещё рекомендую добавить такие настройки перед строкой подключения, чтобы сгенерированный код почище был:
1
|
|||||||
| 17.04.2019, 14:17 | |
|
Помогаю со студенческими работами здесь
20
Создание базы данных со связями и запросы на выборку Запрос SQL. Выборка из базы по элементу первого ListBox. Загрузка соответствующих данных - во второй Загрузка данных из DataSet в Listview Сохранение базы данных со всеми ссылочными документами Загрузка данных из DataSet в таблицу Oracle Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|