.NETでADO Entity Data Modelを使わずに、DataSet、TableAdapterを用いる仕様を練習してみることにした。
練習用のデータベースで適当なものとして、エクセルとしてダウンロードできる厚労省の医薬品データの内用薬を選んだ。
そこから、Visual Studioに内包されているSQL Serverに落とすにはどうしたらよいか。
エクセルから保存したCSVをDB BrowserでSQLiteに取り込んで、SQL Serverのbcpを利用してみた。
12列の1万件程だが、実行ボタンをクリックした瞬間にSQL Serverにデータ複写完了。
データ量が少ないので参考にならないかもしれないが、実感として超高速。
注意点としては、フィールドの数、順番(データ型)が一致してMappingできること。
型はSQLiteのREAL → Decimal、Integer → bit は問題なかった。
Stringの桁あふれはダメみたい。
Imports System.Data.SQLite Imports System.Data.SqlClient Imports env = System.Environment 'SQLite側 Dim dbPass = env.GetFolderPath(env.SpecialFolder.MyDocuments) & "\Pharmacy.db" Using conn As New SQLiteConnection("Data Source= " & dbPass) conn.Open() Dim commandSourceData As SQLiteCommand = New SQLiteCommand( "select * from Naifuku ORDER BY ID", conn) Dim adapter As New SQLiteDataAdapter(commandSourceData) Dim sourcedata As New DataTable adapter.Fill(sourcedata) conn.Close() 'SQLServer側 Dim connectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=PDrug;Integrated Security=True" Using bcp As New SqlBulkCopy(connectionString) bcp.DestinationTableName = "Naifuku" bcp.BatchSize = 1000 Try bcp.WriteToServer(sourcedata) Catch ex As Exception MessageBox.Show(ex.Message) Finally bcp.Close() End Try End Using End Using