2009-02-14 59 views
2

我需要插入一堆類似的記錄到表中,並想知道是否有一個很好/簡單的方法來做到這一點。在c#中生成質量插入語句的最佳方式?

我知道這將是容易的只是建立一個大字符串,但我希望我能找到一個更優雅的方式來做到這一點。

+0

到底有多大這個「幫」? – 2009-02-14 02:19:26

+0

會像codemith的幫助代碼生成器? – 2009-02-14 02:19:55

回答

0

如果您的數據存儲在CSV或XML,可以導入與SQL服務器(假設你使用SQL服務器)

3

我認爲一般的經驗法則是,你不想打開/關閉每個插入的連接。聽起來很明顯,值得一提的是,我已經兩次目睹了這個問題,包括SQL服務器。在一個循環中,我修復的代碼調用了一個外部類庫,用於打開/關閉每個插入的連接。在繁忙的一天,連接池已經滿了,例外情況變得非常激烈。它也會在其他應用程序中導致錯誤,因爲無法建立連接。當然,修正是在循環之前打開連接,在循環中調用ExecuteNonQuery()函數(反覆),並在循環之後關閉連接。看起來微不足道,但它確實是一個常見的錯誤。

最好的問候......

0

如果源數據是在一個文本文件(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(); 
     } 
    } 
} 

}