我需要插入一堆类似的记录到表中,并想知道是否有一个很好/简单的方法来做到这一点。在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