Как создать сценарий на основе данных?(Преобразовать DataTable в SQL-запрос) - PullRequest
0 голосов
/ 12 июня 2019

Я хочу знать, есть ли способ создать SQL-запрос на основе данных C #? 1001 *

Используя dll, я могу читать данные в файле Excel, у меня есть все листы вDataSet, содержащий DataTables, каждый лист находится в отдельной DatatTable.

Я хочу сгенерировать запрос, включающий предложение CREATE для создания таблицы и предложение INSERT для вставки данных в эту таблицу для каждого отдельного листа.

Я не знаю, возможно ли это с помощью Entity Framework или нет.

Как я могу себе представить, для Create это цикл по DataSet и извлечение имени столбцов в каждом DataTableзатем добавьте его в строку как текст запроса.Вот что я имею в виду:

  1. Извлечение структуры таблицы, предположим, что это выглядит следующим образом:

'ID' INT, 'Name' VARCHAR(5), 'SurName' VARCHAR(6), 'Age' INT

Создание DataRowModel:

public class DataRowModel { public string ColumnName { get; set; } public string ColumnType { get; set; } }

Заполнение списка DataRowModel по извлеченным данным:

List<DataRowModel> TableModel = new List<DataRowModel>();

ИСПОЛЬЗУЯ foreach, я могу обратиться к следующему запросу:

string query = @"CREATE TABLE IF NOT EXISTS Test ( 'ID' INT, 'Name' VARCHAR(5), 'SurName' VARCHAR(6), 'Age' INT );";

Но это кажется грязным, какое рекомендуемое решение?На самом деле я хочу создать инструмент, что-то вроде этот крутой сайт .

1 Ответ

0 голосов
/ 12 июня 2019

Я приведу код для примера. Надеюсь, это поможет

Итак, первым шагом является получение списка столбцов из Excel.

    string filename = UploadFile(fuCompanies);
    OleDbConnection Econ = new OleDbConnection(string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""", Server.MapPath("~/files/excels/" + filename)));
    DataSet ds = new DataSet();
    try
    {
        Econ.Open();

        DataTable activityDataTable = Econ.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        OleDbCommand Ecom = new OleDbCommand();
        Ecom.Connection = Econ;
        Ecom.CommandText = string.Format("Select * FROM [{0}]", activityDataTable.Rows[0]["TABLE_NAME"]);

        OleDbDataAdapter oda = new OleDbDataAdapter(Ecom.CommandText, Econ);

        oda.Fill(ds);
    }
    catch (Exception ex)
    {
        //Exception
    }
    finally
    {
        Econ.Close();
    }

    foreach(DataColumn dc in ds.Tables[0].Columns){
        // take columns here and create a dynamic class
    }

Например, о том, как создать динамическую модель (класс), я предлагаю следующую ссылку: Как динамически создать класс

Части 3 и 4 могут быть реализованы с использованием 2 шагов, показанных выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...