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

Posted

技术标签:

【中文标题】如何根据数据表生成脚本? (将 DataTable 转换为 SQL 查询)【英文标题】:How to generate a script based on a datatable? (Convert DataTable to SQL Query) 【发布时间】:2019-10-27 04:06:42 【问题描述】:

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

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

我想生成一个涉及CREATE 子句的查询来创建一个表和INSERT 子句来为每个工作表插入数据到该表中。

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

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

    提取表结构,假设如下:

'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 );";

但是看起来很脏,推荐的解决方案是什么? 其实我想创建一个工具,比如this cool website。

【问题讨论】:

对我来说这听起来很像xy problem。为什么需要使用 DataTable 生成创建表脚本?这看起来真的很奇怪。数据从何而来,为什么不能使用该表来生成脚本? 其实我想创建一个工具,比如this cool website。 那么您是否打算接收一个 excel 文件,然后将数据移动到一个 DataSet 中,每个工作表都有一个表格?在我看来,DataSet 是一个额外的步骤。您应该只评估电子表格中的数据,而不需要 DataSet 的开销。 不像我提供的网站,我想制作一个工具,用户可以在其中上传一个excel文件,然后她/他得到一个查询作为回报,在数据库中制作一个类似的表。我提到的 dll 创建了一个数据集,其中包含代表每个工作表的数据表。 【参考方案1】:

例如,我将给出一些代码。希望对你有帮助

所以第一步是从 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 个步骤来实现

【讨论】:

以上是关于如何根据数据表生成脚本? (将 DataTable 转换为 SQL 查询)的主要内容,如果未能解决你的问题,请参考以下文章

DataGridView绑定DataTable动态生成列 并且将列名中文显示

在 JQuery Datatable 中选择另一个页面后如何重绘 Datatable?

如何根据条件使primefaces datatable列可编辑

在 C# 中将 DataTable 转换为 SQL 的 CREATE TABLE + INSERT 脚本

vb.net 如何将两个datatable合并

jquery datatable如何动态分页