如何基于数据表生成脚本? (将DataTable转换为SQL查询)

时间:2019-06-12 15:24:03

标签: c# sql sql-server excel

我想知道是否有任何方法可以基于C#数据表创建SQL查询?

使用dll,我能够读取excel文件中的数据,我将所有工作表包含在包含DataTables的DataSet中,每个工作表都在单独的DatatTable中。

我想生成一个包含dynamic_cast子句的查询以创建表,并使用CREATE子句为每个工作表将数据插入该表。

我不知道是否可以通过实体框架之类的东西来实现。

我可以想象,INSERT的方法是遍历DataSet并提取每个DataTable中的列名,然后将其添加为字符串作为查询文本。这就是我的意思:

  1. 提取表结构,假设它如下:

Create

  1. 创建一个DataRowModel:

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

  2. 通过提取的数据填充DataRowModel的列表:

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

  1. 使用foreach可以访问以下查询:

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

但是似乎很脏,推荐的解决方案是什么? 实际上,我想创建一个类似this cool website的工具。

1 个答案:

答案 0 :(得分:0)

我将给出一些示例代码。希望对您有帮助

所以第一步是从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
    }

例如,关于如何创建动态模型(类)的建议,我将建议以下链接: How to dynamically create a class

第3部分和第4部分可以使用上面显示的2个步骤实现