Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
2 / 2 / 1
Регистрация: 05.09.2010
Сообщений: 118

MS SQL дамп базы

29.10.2010, 00:50. Показов 5124. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Помогите разобраться с происходящим. Есть задача перенести базу из MS SQL в MуSQL. Мучаюсь уже два дня. успел много чего интересного прочитать и насобирать на просторах интернета, но скаждым разом все больше и больше вопросов. Начну все поэтапно:

А. Нашел простенький код, но не доконца его понял, т. к. в MS SQL и С# новичек. Код работает, но у меня куча вопросов. Итак:

1. Пожалуйста расшифруйте эту строку:
"select name from sys.Tables where schema_id = 1";
Как я понимаю, то этот запрос выбирает полностью все ячейки моей базы (из всех таблиц и полей этих таблиц) или я как всегда ошибаюсь и этот запрос выбирает только поля таблиц или только их название? Не понятно что такое "name" и что значит "schema_id = 1". Ну а "sys.Tables" - это как мне кажеться аналог mysql-ной INFORMATION_SCHEMA, хотя я и в этом то не уверен, так как сегодня уже имел дело с "dbo.sysobjects".

2. И вот он - ужас). Половину (самую простую) этого кода я осознал и усвоил, но если у кого есть время то зацените:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DataTable tables = new DataTable(); 
string sqlTables = "select name from sys.Tables where schema_id = 1"; //непонятный для меня запрос
using (SqlDataReader rdr = new SqlCommand(sqlTables, con).ExecuteReader()) //тут все вроде понятно
{
tables.Load(rdr); //понятно частично - я понимаю, что здесь в tables мы размещаем все таблицы, с из ячейками полями и их свойствами
}
 
DataSet db = new DataSet();
foreach (DataRow table in tables.Rows) //ну вот и отсюда то и начинается дремучий лес.
{
string tableName = (string)table["name"]; //опять это "name". Не понимаю, что это за строка или поле или че вообще в себе сейчас содержит "table" и "table["name"]"
string sql = string.Format("select * from [{0}]", tableName); //здесь у меня даже и предположений нет что чувак, писавший эту часть кода здесь делает и что значит этот запрос "select * from [{0}]"
SqlCommand cmd = new SqlCommand(sql, con); //это понятно - выбирает из базы, то что мне не понятно
SqlDataAdapter da = new SqlDataAdapter(cmd); //не понятно
da.TableMappings.Add("Table", tableName); //не понятно
da.Fill(db); //не понятно
 
 
}
 
db.WriteXml(Console.Out, XmlWriteMode.WriteSchema); //"Console.Out" - это выводит на экран в виде хml, а вот для чего нужно "XmlWriteMode.WriteSchema" тож не ясно!
Вообщем если у кого есть желание закоментить этот код в местах "не понятно" милости прошу) Ну и плюс желательно помочь со вторым вопром, потомучто чую я что разгадка там таится!

3. Теперь я сам себя спрашиваю, а по правильному пути ли я пошел и может не нужно было ввязывать сюда хml, потому что я уже тяжело представляю как я потом буду это все вынимать, парсить и вставлять в MуSQL?

В общем у кого какие идеи есть - говорите!
Использовать программы для миграции баз из MS SQL в MуSQL нельзя. Хотя, не буду таить - пробовал использовать, но ничего не получилось. Я просто не могу законектится к MS SQL серверу по 1433 порту (у меня вообще какие-то непонятки с этим портом - я его даже включить не могу, но это из другой оубрики). Получается только через shared memory, а где это нужно указывать в утилитах для миграции я так и не нашел, если кто знает как то тож скажите, буду благодарен.

Всем заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2010, 00:50
Ответы с готовыми решениями:

Как залить дамп базы данных в базу MySql
у меня есть дамп базы для работы программы, и надо чтобы при первом запуске он загрузил дамп на сервер, как это сделать? дамп в формате...

Дамп базы данных, место хранения базы (phpmyadmin)
Здравствуйте, стал знакомиться с денвером как возникло множество вопросов относительно базы данных: Во-первых, при создании базы данных в...

Восстановить поврежденный файл базы данных SQLite (сделать дамп запароленного файла базы данных)
Вообщем не понятно после чего перестал открываться файл базы данных с ошибкой - "database disk image is malformed". Нашел...

7
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
29.10.2010, 10:18
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DataTable tables = new DataTable(); 
string sqlTables = "select name from sys.Tables where schema_id = 1"; //получаем имена таблиц
using (SqlDataReader rdr = new SqlCommand(sqlTables, con).ExecuteReader()) //тут все вроде понятно
{
tables.Load(rdr); //понятно частично - я понимаю, что здесь в tables мы размещаем все таблицы, с из ячейками полями и их свойствами
}
 
DataSet db = new DataSet();
foreach (DataRow table in tables.Rows) //ну вот и отсюда то и начинается дремучий лес.
{
string tableName = (string)table["name"]; //Получаем имя таблицы
string sql = string.Format("select * from [{0}]", tableName); //форматируем запрос вида SELECT * FROM [Orders]
SqlCommand cmd = new SqlCommand(sql, con); //Создаем команду
SqlDataAdapter da = new SqlDataAdapter(cmd); //Инициализируем адаптер данных для заполнения DataSet
da.TableMappings.Add("Table", tableName); //Назначаем имя таблицы в наборе данных
da.Fill(db); //заполняем таблицу из запроса
 
 
}
 
db.WriteXml(Console.Out, XmlWriteMode.WriteSchema); //XmlWriteMode.WriteSchema нужен для того, что-бы в xml файл попала и xsd-схема данных
0
2 / 2 / 1
Регистрация: 05.09.2010
Сообщений: 118
29.10.2010, 14:07  [ТС]
Я решил сделать все по другому. Вместо того что-бы записывать файл в формате xml, я решил сразу записывать в файл запросы sql вот такого вида:

"insert into " + tableName + "(`х1`, `х2`, `х3`) values('у1', 'у2', 'у3')"

Но есть проблема - все что мне известно на данный момент это переменная "tableName".
Я не знаю как достать имя полей ("х") для каждой таблицы "tableName" - точнее я не знаю как написать скл-запрос.

Ну вообщем-то с остальным думаю справлюсь сам.
Пожалуста подскажите как должен выглядеть нужный мне запрос. Спасибо!
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
29.10.2010, 14:36
Если правильно понял, то получить имя столбца можно так:
C#
1
tables.Columns[0].Caption;
и эти значения подставляйте в запрос
0
2 / 2 / 1
Регистрация: 05.09.2010
Сообщений: 118
29.10.2010, 14:55  [ТС]
Цитата Сообщение от kirill29 Посмотреть сообщение
Если правильно понял, то получить имя столбца можно так:
C#
1
tables.Columns[0].Caption;
и эти значения подставляйте в запрос
Оно мне постоянно пишет name. Если ставлю вместо нуля "1" - ошибка. Это не совсем то. Мне нужно узнать имя каждого поля в таблице "tableName".
как я понимаю - то нужно сделать запрос в системную таблицу и вытащит оттуда значения соответствующие моей "tableName". А вот как этот запрос написать я и не знаю?
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
29.10.2010, 15:04
syegorius, в моем понимании поле - это столбец таблицы.
ИМХО вы не правильно понимаете работу запроса "select name from sys.Tables where schema_id = 1";
Он вам возвращает имена таблиц в виде таблицы, у которой один столбец и сколько-то строк. Вам нужно просто пробежаться по этой полученной таблице и получить значение каждой строки этого единственного столбца. ну и запихать полученные значения куда вам надо.
Если я что-то не так написал, то поправьте.

Добавлено через 53 секунды
Цитата Сообщение от syegorius Посмотреть сообщение
Оно мне постоянно пишет name.
Потому-что у вас в таблице один столбец - "name" и его порядковый номер 0
0
2 / 2 / 1
Регистрация: 05.09.2010
Сообщений: 118
29.10.2010, 15:55  [ТС]
Цитата Сообщение от kirill29 Посмотреть сообщение
syegorius, в моем понимании поле - это столбец таблицы.
ИМХО вы не правильно понимаете работу запроса "select name from sys.Tables where schema_id = 1";
Он вам возвращает имена таблиц в виде таблицы, у которой один столбец и сколько-то строк. Вам нужно просто пробежаться по этой полученной таблице и получить значение каждой строки этого единственного столбца. ну и запихать полученные значения куда вам надо.
Если я что-то не так написал, то поправьте.

Добавлено через 53 секунды

Потому-что у вас в таблице один столбец - "name" и его порядковый номер 0
Стоп. Давайте по порядку.
Этим запросом я получаю таблицу в которой одно поле - "name", и в его ячейках имена таблиц. Т.е. когда я делаю вот так:

foreach (DataRow table in tables.Rows){ string tableName = (string)table["name"];}

я перебираю имена таблиц. Но ведь мне то надо узнать имена полей (столбцов) для каждой таблицы table["name"]. И как бы я щас подумал вставить этот запрос во внутрь этого форъича, что бы узнать их. Но только каким должен быть запрос?
Но как
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
29.10.2010, 16:03
Например, таким образом получим столбцы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
foreach (DataRow table in tables.Rows) //ну вот и отсюда то и начинается дремучий лес.
{
string tableName = (string)table["name"]; //Получаем имя таблицы
string sql = string.Format("select * from [{0}]", tableName); //форматируем запрос вида SELECT * FROM [Orders]
SqlCommand cmd = new SqlCommand(sql, con); //Создаем команду
SqlDataAdapter da = new SqlDataAdapter(cmd); //Инициализируем адаптер данных для заполнения DataSet
da.TableMappings.Add("Table", tableName); //Назначаем имя таблицы в наборе данных
da.Fill(db); //заполняем таблицу из запроса
   foreach(DataColumn col in db.Tables[tablename].Columns)
   {
        // здесь код для создания текста запроса формата "insert into " + tableName + "(`х1`, `х2`, `х3`) values('у1', 'у2', 'у3')"
        // сам заголовок получаем col.Caption;
   }
}
для создания запроса используйте StringBuilder

Как-то так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2010, 16:03
Помогаю со студенческими работами здесь

Дамп базы данных
mysqldump -u USER -pPASSWORD DATABASE > dump.sql далее ничего не происходит,как быть? как вделать дамп? На user,database и password пишу...

Не восстанавливается дамп базы
Здравствуйте. Есть сайт, у которого база весит 1Гб. (таблицы cache_form-700мб, cache_filter-215мб, cache_page-50мб). Дамп базы сделать...

Не сохраняется дамп базы
Выполняю такую команду: start mysqldump.exe -uroot -hLOCALHOST -p000000 -A > backup.sql В консоли видно что он что то делает,...

Сделать дамп базы данных
подскажите, как импортировать базу данных. сервер, имя базы данных, имя и пароль есть.

Как правильно сделать дамп базы?
Делаю через phpmyadmin , export -> делается всё ок, пробую закинуть всё это добро в другую базу импортом через тот-же phpmyadmin...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru