如何根据数据表生成脚本? (将 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列可编辑