CSVをテーブルへ取り込む方法(SQLServerのみ)
多分一番早い方法なのであろう。
(自信なし)
.NET 2.0で導入されたSqlBulkCopyをつかってみる。
(SQLServer限定の機能だけど)
中途半端なサンプルしかなかったので簡単に書いてみた。
サンプルコード
public static void DoConnect() { //接続文字列の構成 string connectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)}; DBQ=C:\Temp"; string dbStr = @"Data Source=XXXXX;Initial Catalog=XXXX;Persist Security Info=True;User ID=XXXX;Password=XXXX;"; using (OdbcConnection conn = new OdbcConnection(connectionString)) { try { //データベース接続のOpen conn.Open(); //CSVを読む OdbcCommand command = new OdbcCommand("SELECT * FROM test.csv",conn); OdbcDataReader reader = command.ExecuteReader(); //データ型をキチンとするならSchemaを使う事! //DataTable t = reader.GetSchemaTable(); //入れ込む先のDBへ接続 using (SqlConnection scon = new SqlConnection(dbStr)) { //接続 scon.Open(); SqlBulkCopy copy = new SqlBulkCopy(scon); copy.DestinationTableName = "Test"; //そのままダイレクトに入れ込むべし copy.WriteToServer(reader); } } finally { if (conn != null) { conn.Close(); } } } }
内部でbulk insertをやってるようなイメージかな。
OdbcConnectionを使えばExcelとかもガンガン使えちゃいます。
一応SqlBulkCopyもMappingを持っているので項目を入れ替えたりもできます。
つーか.NETのサンプルってメモリを意識していないコード多くない?
そんな人と一緒に仕事したくねえー。
しかしやっと.NETにも少し慣れてきた感が出てきた。
C# 2.0の機能はけっこー使うようになってきた。
(Generic、Nullableとか使用頻度が高くなってきた)
うくく。