Reputation: 79
I have a string array in C3 that gets populate with Yahoo Historical data that has data in the array like this..
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());
Array rows--->> Date,Open,Low,close,Volume,AdjClose
The array rows will have each row as stated above with 6 columns of data per row. I have no idea how to insert that into a sql table? I know how to insert to a sql table, but not like this from this array structure. Anyone know how to insert every single row of thousands with this structure??
Thanks in Advance!
Upvotes: 2
Views: 3765
Reputation: 1062905
I'm reading "bulk insert" as SqlBulkCopy
. There are two ways to work with SqlBulkCopy
. The first is to pre-process your data into a DataTable
. This is simple and easy, but is only suitable for small-to-moderate data due to the requirement to buffer all the data into a DataTable
first!
The second is to create an IDataReader
; this is a streaming API, so can be used for huge forwards-only data sources (such as massive log files). I wrote a SimpleDataReader
that you can see here (ignore the xml; focus on the usage) that I use in a few places. It works fine; all you do is:
DoRead
attempt to read the next row (perhaps ReadLine
on a text-reader), and either call SetValues
and return true
, or return false
if there is no more dataDoClose
if you want to clean up anything once the data is consumed (close the file, perhaps)Upvotes: 0
Reputation: 1315
The most efficient way is to use SqlBulkCopy.
The only problem with that approach is that you will have to project your data into a DataTable, DataRow[], etc. in order to use SqlBulkCopy
Upvotes: 1
Reputation: 6560
Depending on your SQL server technology, this may apply:
A SQL feature (since SQL-92) is the use of row value constructors to insert multiple rows at a time in a single SQL statement:
INSERT INTO ''TABLE'' (''column-a'', [''column-b, ... ''])
VALUES (''value-1a'', [''value-1b, ...'']),
(''value-2a'', [''value-2b, ...'']),
...
This feature is supported by DB2, SQL Server (since version 10.0 - ie. 2008), PostgreSQL (since version 8.2), MySQL, and H2.
Upvotes: 1