任何人都知道如何从Array中使用逗号分隔的列批量插入SQL到SQL

时间:2010-03-07 04:22:49

标签: c#

我在C3中有一个字符串数组,其中包含Yahoo历史数据,该数据包含数组中的数据。

string url = string.Format("http://ichart.yahoo.com/table.csv?s={0}&a=2&b=1&c=2010&d={1}&e={2}&f={3}&g=&ignore=.csv",
    SymbolSelect, CurrentMonth, Today, CurrentYear); 
WebClient web = new WebClient();
string data = web.DownloadString(url);
string[] rows = data.Split("\n".ToCharArray());

数组行--->>日期,打开,低,关闭,音量,AdjClose

数组行将具有如上所述的每行,每行有6列数据。我不知道如何将其插入到sql表中?我知道如何插入一个sql表,但不是这样从这个数组结构。任何人都知道如何用这种结构插入每一千行?

提前致谢!

3 个答案:

答案 0 :(得分:1)

根据您的SQL Server技术,这可能适用:

  

SQL功能(自SQL-92开始)是使用行值构造函数在一个SQL语句中一次插入多行:

INSERT INTO ''TABLE'' (''column-a'', [''column-b, ... '']) 
VALUES (''value-1a'', [''value-1b, ...'']), 
       (''value-2a'', [''value-2b, ...'']), 
       ...
  

DB2,SQL Server(自10.0版本 - 即2008),PostgreSQL(自8.2版本),MySQL和H2支持此功能。

答案 1 :(得分:1)

最有效的方法是使用SqlBulkCopy

该方法的唯一问题是您必须将数据投影到DataTable,DataRow []等中才能使用SqlBulkCopy

答案 2 :(得分:0)

我正在将“批量插入”视为SqlBulkCopy。有两种方法可以使用SqlBulkCopy。第一种方法是将数据预处理为DataTable。这很简单,但仅适用于小到中等数据,因为需要首先将所有数据缓冲到DataTable

第二个是创建IDataReader;这是一个流API,因此可以用于大型仅限转发数据源(例如海量日志文件)。我写了一个SimpleDataReader你可以看到here(忽略xml;关注用法)我在几个地方使用过。它工作正常;你要做的就是:

  • 在构造函数中,告诉 base 构造函数列的类型
  • DoRead中尝试阅读下一行(可能是文本阅读器上的ReadLine),并调用SetValues并返回true,或返回{{1}如果没有更多数据
  • 覆盖false如果你想在消费数据后清理任何东西(可能关闭文件)