我在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表,但不是这样从这个数组结构。任何人都知道如何用这种结构插入每一千行?
提前致谢!
答案 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;关注用法)我在几个地方使用过。它工作正常;你要做的就是:
DoRead
中尝试阅读下一行(可能是文本阅读器上的ReadLine
),并调用SetValues
并返回true
,或返回{{1}如果没有更多数据false
如果你想在消费数据后清理任何东西(可能关闭文件)