2017-07-04 214 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

我希望這會幫助你。 :)