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

     2023-04-12     160

关键词:

【中文标题】如何根据数据表生成脚本? (将 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 个步骤来实现

【讨论】:

c#将datatable生成easyui的绑定tree的json数据格式

...解析的接送数据,我们可以通过c#将我们从数据库中得到datatable转换成那样的格式,datagrid的好转换,简单的循环拼串就可以,不过easyui绑定树的时候的接送数据格式稍有不同,比datagrid和datagridtree得到json数据要稍微复杂一些,... 查看详情

java如何根据实体类图生成sql脚本?

就是数据库建模工具中的导出sql脚本这个功能是怎么实现的自动生成C#和Java实体类,自动生连接符为“&”和“+”的INSERT,UPDATE,DELETE,SELECT语句,支持简单的数据查询修改。参考技术A你说的是?mybatisgenerator? 查看详情

如何生成将使用数据重建我的 MS SQL Server 2005 数据库的脚本?

】如何生成将使用数据重建我的MSSQLServer2005数据库的脚本?【英文标题】:HowdoIgeneratescriptsthatwillrebuildmyMSSQLServer2005databasewithdata?【发布时间】:2010-09-0607:13:43【问题描述】:我有一个SQLServer2005数据库,我希望能够立即重新创建... 查看详情

如何将我的 selectInput 链接到我的 DataTable 以根据选择更新表? (这是R闪亮)

】如何将我的selectInput链接到我的DataTable以根据选择更新表?(这是R闪亮)【英文标题】:HowcanIlinkmyselectInputtomyDataTabletoupdatethetablebasedontheselections?(thisisRShiny)【发布时间】:2021-10-2521:28:30【问题描述】:具体来说,我使用的是pi... 查看详情

vb.net如何将两个datatable合并

我现在有两个datatable一个叫bill一个叫两个表中pRunID字段关联我想要除了这个字段的其他字段,生成一个新的datatable显示到表格控件中参考技术A自己新建一个table循环两个表数据取自己需要的放在自己新建的table。主要对vb不熟应... 查看详情

将 DataTable 保存到数据库表中

...9-0207:38:33【问题描述】:我正在从我的应用程序生成一个数据表,我想将整个数据表保存到一个数据库表中。DataTableds=//addtheinfofromthequeueintheapplicationDataTable正在生成,但是接下来要做什么。告诉我一些语法。我也不需要sele 查看详情

如何将datatable转成实体对象

比如一个实体类Student,如何将DataTable转成Student类呢?publicstaticSignInfoselectByIDx(intpid)//根据ID查询今天的返回对象DataTabledt=SignInfoServices.selectByID(pid);if(dt.Rows.Count>=1)SignInfosig=newSignInfo();sig.Date=(DateTime)dt.Rows[0]["date"];sig.Pid=(in... 查看详情

c#如何撰写将一个datatable的所有奇数行提取出来生成一个表,所有偶数行提取出来生成一个表?

...ex%2==1).ToArray();但要生成Table会稍微麻烦点:之后再建两个DataTable,再分别Import两个List中的Row(用foreach或for循环都行)。如果用值字段来区分奇偶行,调整一下LINQ中的Where条件就行。参考技术ADatatable还有DataSet都是只读的,不能动态... 查看详情

如何将sqlserver2005数据库导出

方法/步骤第一步:查看需要备份的数据库登入SQLServerManagementStudio后,在右侧打开树状图可以看到相关数据库。第二步:数据库脱机选中需要备份的数据库后,选中“任务”->“脱机”,脱机时候,必须关掉表、查询等第三步... 查看详情

如何将datagridview转换为datatable?

DataGridView是转换不了DataTable的,因为DataGridView是控件,DataTable是数据结构,但是DataGridView的数据集是有可能的,前提是DataGridView绑定数据集的时候绑定的就是DataTable类型的数据集.DataTabledt=DataGridView.DataSourseasDataTable;参考技术As529586的正... 查看详情

如何将 DataTable 绑定到 DataGrid

】如何将DataTable绑定到DataGrid【英文标题】:HowBindDataTabletoDataGrid【发布时间】:2011-10-1202:24:39【问题描述】:这是我的数据表。DataTable_simpleDataTable=newataTable();varperson=newDataColumn("Person")DataType=typeof(Person);_simpleDataTable.Columns.A 查看详情

jquerydatatable如何动态分页

一、分页分页的基本思想是根据datatable的页码及每页显示的行数,将数据从数据库分段提出,然后再填充到表格中,以达到分页的效果。这里需要用到datatable插件的几个属性:"sEcho":这个属性需要原封不动地传回给datatable,具... 查看详情

如何将 DataTable 行移动到其 DataTable 的第一个位置

...将其移动到基于列column1值的该DataTable上的第一行。我的数据表dt1是通过数据库查询填充的,而要搜索的值是通过来自另一个 查看详情

如何在 Netezza 中根据主键生成 GROUP BY 脚本

】如何在Netezza中根据主键生成GROUPBY脚本【英文标题】:HowtogenerateGROUPBYscriptbasedonpriamrykeyinNetezza【发布时间】:2016-05-0219:24:38【问题描述】:在Netezza中,不强制执行主键。线程HowtoovercomeNetezza\'slackofuniqueconstraint/referentialintegrityen... 查看详情

如何将参数传递给 p:dataTable 中的 valueChangeListener?

...ataTable?【发布时间】:2012-01-1300:46:01【问题描述】:我在数据表内的<h:selectBooleanCheckbox>上调用valueChangeListener。并且该数据表再次位于另一个(外部) 查看详情

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

...是一个单一的插入。除此之外,我也需要创建表(相同的数据表结构)所以:我有一个填充数据的DataT 查看详情

根据datatable动态生成grid++report的方法

///<summary>///生成grid++report模板///</summary>///<paramname="dt"></param>///<returns></returns>publicintGenerateNurModel(DataTabledt){BNuringListBNu=newBNuringList(); 查看详情

如何将 DataGrid 转换为 dataTable

...想在不使用任何循环的情况下将所有数据网格记录复制到数据表中。例如:DimdtasNewDataTabledt=Datagrid1.Items但这不起作用并给出错误消息。我的开发平台是VisualStudio2010,语言是WPF和vb.net4.0【 查看详情