Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Коллеги, подскажите. Нужно создать в базе данных структуру таблиц согласно DataSet. Доступ к БД абстрактный, посредством DBConnection. Не могу найти никаких средств для этого, собираюсь писать код, который сгенерирует CREATE TABLE запрос по DataSet. А есть правильный способ?
Здесь гляньте пример.
Другой вариант — DataSet можно вроде в XML сконвертить и написать для него XSLT, либо макросами обработать до SQL-скрипта (автоматизация йопт)
Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Коллеги, подскажите. Нужно создать в базе данных структуру таблиц согласно DataSet. Доступ к БД абстрактный, посредством DBConnection. Не могу найти никаких средств для этого, собираюсь писать код, который сгенерирует CREATE TABLE запрос по DataSet. А есть правильный способ?
Правильный способ — создавать базу данных скриптами во время установки приложения.
Здравствуйте, Павел А.Ануфриков, Вы писали:
L>>Вот когда создается база данных, тогда и создавайте схему.
ПАА>Не понял, к сожалению. Схема базы данных поставляется с приложением (xsd или DataSet, не важно). Когда пользователь захочет сгрузить данные в БД, он конфигурирует подключение, и тогда в его базе должны появиться таблицы по моей схеме.
Не, датасет — это схема тех данных, которые нужны пользвателю. В общем случае эа схема отличается от схемы даных в базе данных. И потому не стоит возлагать на датасет задачу хранения схемы базы данных.
Если вам все-таки необходимо из приложения создавать схему базы данных, используйте для этого простые sql скрипты и запускайте их.
Коллеги, подскажите. Нужно создать в базе данных структуру таблиц согласно DataSet. Доступ к БД абстрактный, посредством DBConnection. Не могу найти никаких средств для этого, собираюсь писать код, который сгенерирует CREATE TABLE запрос по DataSet. А есть правильный способ?
Здравствуйте, Павел А.Ануфриков, Вы писали:
L>>Правильный способ — создавать базу данных скриптами во время установки приложения.
ПАА>Во время установки неизвестно ни расположение БД, ни тип СУБД. Пользователь выбирает базу в процессе работы. После этого нужно создать её структуру.
Вот когда создается база данных, тогда и создавайте схему.
L>Вот когда создается база данных, тогда и создавайте схему.
Не понял, к сожалению. Схема базы данных поставляется с приложением (xsd или DataSet, не важно). Когда пользователь захочет сгрузить данные в БД, он конфигурирует подключение, и тогда в его базе должны появиться таблицы по моей схеме.
L>Не, датасет — это схема тех данных, которые нужны пользвателю. В общем случае эа схема отличается от схемы даных в базе данных. И потому не стоит возлагать на датасет задачу хранения схемы базы данных. L>Если вам все-таки необходимо из приложения создавать схему базы данных, используйте для этого простые sql скрипты и запускайте их.
Идею понял, спасибо. Почему хочу избежать хранения структуры БД в скрипте — по причине различного синтаксиса для различных БД. При программной генерации скрипта или запроса можно различия учесть, параметризировав генератор. Поэтому хотел за основу взять xsd схему и по ней строить запросы уже с учетом SQL диалекта. А для удобства решил использовать DataSet. Неверно?
Здравствуйте, Павел А.Ануфриков, Вы писали:
L>>Если вам все-таки необходимо из приложения создавать схему базы данных, используйте для этого простые sql скрипты и запускайте их.
ПАА>Идею понял, спасибо. Почему хочу избежать хранения структуры БД в скрипте — по причине различного синтаксиса для различных БД. При программной генерации скрипта или запроса можно различия учесть, параметризировав генератор. Поэтому хотел за основу взять xsd схему и по ней строить запросы уже с учетом SQL диалекта. А для удобства решил использовать DataSet. Неверно?
Такая унификация автоматически означает, что вы сможете использовать только некоторое подмножество возмжностей сервера из вашего приложения.
Вам действительно это надо?
L>Такая унификация автоматически означает, что вы сможете использовать только некоторое подмножество возмжностей сервера из вашего приложения. L>Вам действительно это надо?
Да, это оправдано. Суть приложения — генерируется поток данных, который просто складывается в БД. Никакой другой работы приложение с БД не выполняет. Примером может быть мониторинг параметра во времени, например, значение температуры каждую минуту.
Здравствуйте, Павел А.Ануфриков, Вы писали:
L>>Такая унификация автоматически означает, что вы сможете использовать только некоторое подмножество возмжностей сервера из вашего приложения. L>>Вам действительно это надо?
ПАА>Да, это оправдано. Суть приложения — генерируется поток данных, который просто складывается в БД. Никакой другой работы приложение с БД не выполняет. Примером может быть мониторинг параметра во времени, например, значение температуры каждую минуту.
Тога последуйте совету RushDevion-а: через GetXmlSchema вытащите xsd датасета и через xslt сгенерите скрипт на создание.
Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Во время установки неизвестно ни расположение БД, ни тип СУБД. Пользователь выбирает базу в процессе работы. После этого нужно создать её структуру.
А если вам "подсунут" odbc-провайдер к текстовому файлу, например, как будете структуру создавать? Нет, так не делается.
Обычно, вы у себя знаете некое множество СУБД, с которыми сможете работать (на которых сможете создавать базы данных необходимой вам структуры). Под такое конечное и заранее известное множество (даже и большое) уже можно решать вашу задачу. А уж как именно: писать под каждую СУБД скрипты или xml-преобразования или использовать какой-нить универсальный код, умеющий создавать DDL под нжную вам — решайте как удобнее (первый способ более громоздкий, менее гибкий, зато позволит лучше использовать возможности СУБД).
В принципе, DDL не такой уж и большой, вполне можно и самостоятельно выписать. Тем более, учитывая, что и в самом DataSet-e не так много всего и используется.
Help will always be given at Hogwarts to those who ask for it.