我需要插入一堆類似的記錄到表中,並想知道是否有一個很好/簡單的方法來做到這一點。在c#中生成質量插入語句的最佳方式?
我知道這將是容易的只是建立一個大字符串,但我希望我能找到一個更優雅的方式來做到這一點。
我需要插入一堆類似的記錄到表中,並想知道是否有一個很好/簡單的方法來做到這一點。在c#中生成質量插入語句的最佳方式?
我知道這將是容易的只是建立一個大字符串,但我希望我能找到一個更優雅的方式來做到這一點。
的SqlBulkCopy
類有WriteToServer
方法裏面寫上多條記錄的記錄。
我創建了實現的IDataReader
接口,我可以作爲參數傳遞到SqlBulkCopy.WriteToServer
方法(參見ADO.NET: Building a Custom Data Provider for Use with the .NET Data Access Framework對於如何實現IDataReader
界面的示例)的類。
可能比實現IDataReader
(即通過使用其他SqlBulkCopy.WriteToServer
方法之一)更簡單的方法。
如果您的數據存儲在CSV或XML,可以導入與SQL服務器(假設你使用SQL服務器)
我認爲一般的經驗法則是,你不想打開/關閉每個插入的連接。聽起來很明顯,值得一提的是,我已經兩次目睹了這個問題,包括SQL服務器。在一個循環中,我修復的代碼調用了一個外部類庫,用於打開/關閉每個插入的連接。在繁忙的一天,連接池已經滿了,例外情況變得非常激烈。它也會在其他應用程序中導致錯誤,因爲無法建立連接。當然,修正是在循環之前打開連接,在循環中調用ExecuteNonQuery()函數(反覆),並在循環之後關閉連接。看起來微不足道,但它確實是一個常見的錯誤。
最好的問候......
如果源數據是在一個文本文件(CSV或一些標準可以讀取),使用一個StreamReader讀取每一行,而這需要該行並將其轉換功能到單個插入語句。然後就讓它飛
例如,假設你有一個這樣的文件:
foo 1
bar 2
baz 3
...
using(StreamReader sr = new StreamReader(File.Open("sourcefile.txt", FileMode.Open)))
{
using(SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string line ="";
while((line = sr.ReadLine()) != "")
{
string[] parts = line.split(new string[]{" "}, StringSplitOptions.None);
string cmdTxt = String.Format("INSERT INTO MyTable(name, value) VALUES('{0}','{1}')", parts[0], parts[1]);
using(SqlCommand cmd = new SqlCommand(cmdTxt, conn))
{
cmd.ExecuteNonQuery();
}
}
}
}
到底有多大這個「幫」? – 2009-02-14 02:19:26
會像codemith的幫助代碼生成器? – 2009-02-14 02:19:55