Как создать таблицу SQL server с динамическим количеством столбцов из C#?
Привет, я разрабатываю прикладное программное обеспечение для автомобильной промышленности. я использую несколько просмотров datagridviews в своем графическом интерфейсе для отображения некоторых критических данных пользователю. В некоторых таблицах данных числовые столбцы фиксированы, поэтому у меня нет проблем с созданием динамической таблицы sql server с именами столбцов, такими же, как в datatable, и переносом табличных данных из C# в таблицу sql server.
В то время как в некоторых таблицах данных пользователь хочет добавить/удалить любое количество столбцов в соответствии со своими потребностями. Поэтому в таких случаях я не могу жестко закодировать динамическое создание таблицы sql server с фиксированным количеством столбцов. Я думаю через условие if, как
if(dataGridView1.Columns.Count == 2) { var commandStr = "If not exists (select name from sysobjects where name = 'DGV2') CREATE TABLE DGV2(" + dataGridView2.Columns[0].Name + " char(50)," + dataGridView2.Columns[1].Name + " char(50))"; } if(dataGridView1.Columns.Count == 3) { ....//add 3 number of columns }
но я чувствую, что это затягивающий способ, и я должен ограничить пользователя от добавления coulmns за пределами определенного количества. Поэтому я хочу спросить ваши предложения о том, как преодолеть эту проблему? пожалуйста, помогите мне
Что я уже пробовал:
string connectionString = @"Data Source=LENOVO-PC\SQLEXPRESS;Initial Catalog=TESTDB;Integrated Security=True"; SqlConnection connection = new SqlConnection(connectionString); connection.Open(); var commandStr = "If not exists (select name from sysobjects where name = 'DGV2') CREATE TABLE DGV2(" + dataGridView2.Columns[0].Name + " char(50)," + dataGridView2.Columns[1].Name + " char(50))"; using (SqlCommand command = new SqlCommand(commandStr, connection)) command.ExecuteNonQuery(); connection.Close();
также я упомянул тему SQL pivot. Но это не то, что мне нужно.
http://stackoverflow.com/questions/12643117/dynamically-create-columns-sql
Garth J Lancaster
Я работал с некоторыми программами, и они всегда позволяли своим таблицам иметь определенное количество "пользовательских полей", так что у них было бы
user_int_1
user_int_2
...
user_text_1
user_text_2
и т. д. требуется до 5 или 10 полей каждого типа. Раньше я думал, что это так же уродливо, как грех, но по сравнению с ручной конкатенацией sql для создания "динамической" таблицы это просто находка-периодически, если пользователь мог сделать дело, схемы БД обновлялись, и некоторые поля user_ мигрировали в "стандартную схему".
Если бы я собирался сделать это по-вашему, я бы, скорее всего, построил процедуру, которая берет список/массив кортежей/структур, представляющих имя поля и тип данных, и итеративно строит оператор SQL create из этого списка
Member 11905879
Да, согласен. Будет лучше обойтись со структурами