2017-07-04 218 views
0

我想使用带有数据表的数据适配器将数千条记录插入到30列sql表中。从SQL创建DataTable架构

SqlDataAdapter adapter = new SqlDataAdapter(); 
DataTable table = new DataTable(); 
adapter.InsertCommand = new SqlCommand("INSERT INTO ..."); 
adapter.UpdateBatchSize = 1000; 
DataRow r = null; 
foreach(var entry in list) 
{ 
    r = table.NewRow(); 
    r["lastchange"] = entry.TryGet("LastChangeTime"); 
    // <- throws System.ArgumentException: Column does not belong to table 
    ... 
} 

有什么办法不是手动定义数据表的模式,而是从表中读取它的插入应该发生在?

+0

这可能是重复[SQL语句来获取列类型](https://stackoverflow.com/questions/13405572/sql-statement-to-get-column-type) –

回答

1

定义SelectCommand并应用Fill方法首先获取数据。如果您只需要表模式,只需使查询不返回任何行。

SqlDataAdapter adapter = new SqlDataAdapter(); 
DataTable table = new DataTable(); 
adapter.SelectCommand = new SqlCommand("SELECT * FROM myTable WHERE 1=2"); 
adapter.Fill(table); 
+0

不要这样做。我在现实世界中看到了这一点,这是糟糕的性能灾难。 –

+0

@MarekVitek,环境下一切都可能导致灾难。你能更具体一点,哪条线是危险的? – Serg

+0

危险是通过针对数据库运行查询来获取数据结构。你可能会认为你的查询很简单,然后会有人认为为什么不把它放在视图后面,突然间你发现自己对包含多个连接和几个条件的视图运行查询,所以即使简单的查询也会做很多工作。 –

0

您可以创建/在你的项目中定义的数据集何地您需要可以使用它在你的后续操作。

查看下面的链接,显示如何将数据集添加到项目中并向其添加表格以及如何将数据适配器与此数据集一起使用。

https://msdn.microsoft.com/en-us/library/04y282hb.aspx

https://msdn.microsoft.com/en-us/library/ms171919.aspx

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/populating-a-dataset-from-a-dataadapter

我希望这会帮助你。 :)