2009-02-14 72 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(); 
     } 
    } 
} 

}