powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Копирование структуры таблицы
15 сообщений из 15, страница 1 из 1
Копирование структуры таблицы
    #34085417
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
У меня следующий вопрос.
Есть таблица в MySQL. Как с помощью ADO.NET создать можно создать еще одну таблицу с точно такой же структурой как и исходная?
Заранее спасибо.
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34085687
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну несколко вариантов, например бегая по полям создать самому
create table ...
второй вариант изучить структуру MySQL, навернека там есть дублирование таблицы по запросу или по какой то процедурой!


----
www.hramin.jino-net.ru
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34085710
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А возможно как-нибудь из DataSet создать таблицу?
Т.е., у меня в DataSet есть какой-то набор данных. И на основании какой-нить таблицы из этого DataSet я хочу создать новую таблицу (возможно даже не в исходной СУБД). Это реально? Я подозреваю, что сначала надо сохранить таблицу и ее схему в xml, а потом подгрузить заново в новый DataSet... Но как из этого DataSet потом создать таблицу??
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086095
junior_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По данному DataTable я создавал динамический sql (create table ......) по другому выхода не нашел....
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086361
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
junior_По данному DataTable я создавал динамический sql (create table ......) по другому выхода не нашел....

А не поделитесь кодом?
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086471
zz118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо через датасеты! потеряются данные при конвертации типов. Уперед через sys. процедуры!
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086489
junior_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
метод по заданному cloningTableName - имя таблицы из одной базы переносит таблицу в другую, но
1. не копируються первичные ключи
2. не копируються constraint-ы
3. не переносяться varchar - всегда перевожу как nvarchar(255)
Да и вобще нехрошо так делать, наверно, может знающие люди скажут как принципиально по другому сделать

Код: plaintext
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
           public bool CloneTableStructure(string cloningTableName)
           {  
               // function return true if table created
               // in othercase return false;
               bool result = false; //variable for result
               #region initsettings
               // init settings
               OdbcDataAdapter sourceDataAdapter; // data adapter for IB database;
               string selectTableStr = String.Format("select * from {0}", cloningTableName); // select statement
               DataTable sourceDataTable;// source data table for cloning
               sourceDataAdapter = new OdbcDataAdapter(selectTableStr, SourceStorage.IBConnection); // get data adapter for table
               DataSet sourceDataSet = new DataSet(); // create dataset instance
               sourceDataTable = new DataTable(cloningTableName);
               try
               {
                   sourceDataAdapter.FillSchema(sourceDataTable, SchemaType.Source);   // retrive table structure    
               }
               catch
               {
                   
               }
               DataTable targetDataTable = new DataTable(cloningTableName); // create instance of cloning table
               targetDataTable = sourceDataTable.Clone(); // create structure copy of table,  new cloned table is Empty
               #endregion

               #region create table statement
               string creatingSqlStatement =""; // variable for Create table sql statement
               string creatingColumnStr = "";
               DataColumnCollection tableColumns = targetDataTable.Columns; // retrive columns collection
               DataColumn theColumn;// current working column
               
               creatingSqlStatement = String.Format("create table {0} ( ", cloningTableName); // add init statement
               
               string newColumnName;
               string newColumnType;
               string newAllowNull;
               string newColumnSeparator;
               // loop by columns
               for (int columnIdx =  0 ; columnIdx < tableColumns.Count; columnIdx++)
               {
                   creatingColumnStr = "";
                   theColumn = tableColumns[columnIdx]; // get column object
                   newColumnName = theColumn.ColumnName; // get column name
                   // get column name;
                   SqlDbType sqlType = TypeConvertor.ToSqlDbType(theColumn.DataType);
                   // NO any varchars only nvarchar
                   if (sqlType == SqlDbType.VarChar)
                   {
                       sqlType = SqlDbType.NVarChar;
                   }
                   newColumnType = sqlType.ToString();
                   
                   if (sqlType == SqlDbType.NVarChar)  // set size for strings
                   {
                       newColumnType += String.Format("({0})", 255  /*theColumn.MaxLength*/);
                       // because column do not have information about real length!!!
                   };
                   //
                   newAllowNull = "";
                   if (!theColumn.AllowDBNull)  // is can be null
                   {
                       newAllowNull = "not null";
                   }
                              
                   // add coma between columns
                   newColumnSeparator = "";
                   if (columnIdx != (tableColumns.Count- 1 ))
                   {
                       newColumnSeparator = " ,"; 
                   }
                   // complite column string
                   creatingColumnStr = newColumnName + " " + newColumnType + " " + newAllowNull + newColumnSeparator;
                   creatingSqlStatement += creatingColumnStr;

                   //MessageBox.Show(creatingColumnStr);
                   //for debug show compiled string
               };
               // finishing create statement
               creatingSqlStatement += ")"; // 
               //MessageBox.Show(creatingSqlStatement); // for debug show full statemnt
               #endregion

               #region createtable
               SqlCommand createSqlCommand = new SqlCommand();
               createSqlCommand.CommandText = creatingSqlStatement;
               createSqlCommand.Connection = MergingStorage.SqlConnection;
               try
               {
                 createSqlCommand.ExecuteNonQuery();
                 result = true;
               }
               catch(Exception e)
               {
                   MessageBox.Show(e.Message);
                   result = false; // if exception then result false;
               }
               return result;

               #endregion



           }
       }

...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086553
zz118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sys.sp_table_constraints_rowset
sys.sp_tableoption
sys.sp_tables_info_rowset
sys.sp_tables
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086559
zz118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и sp_help наконец!
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086632
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
junior_
Спасибо. Буду разбираться.
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086638
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zz118sys.sp_table_constraints_rowset
sys.sp_tableoption
sys.sp_tables_info_rowset
sys.sp_tables

Насколько я понимаю - это все для MS SQL Server. А если у меня база в MySQL?
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086650
zz118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ищи аналоги
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34086663
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, в идеале было бы здорово создать структуру новой таблицы на основе xsd, в которую записывается структура существующей (с этим-то проблем нет)... И передавать xsd между двумя компами проще пареной репы...
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34087442
andix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что, господа, ни у кого нет идей как можно из xsd сформировать структуру таблицы? В принципе эта задача сводится к тому, чтобы из xsd получить sql. И одним из способов реализовать это является путь, который предложил "junior_". А никто не встречал софта, который позволяет преобразовать xsd в sql??? Или может быть реализовывал это у себя в проекте??
...
Рейтинг: 0 / 0
Копирование структуры таблицы
    #34088832
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andix
ни у кого нет идей как можно из xsd сформировать структуру таблицы?
....
А никто не встречал софта, который позволяет преобразовать xsd в sql???

http://sourceforge.net/projects/xsd2db
переделать так как надо не вижу проблем

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Копирование структуры таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]