Sql Compact Edition(例:(* .sdf)ファイル)でSqlBulkcopyを使用することは可能ですか?
私はそれがSQL Server 200 Upで動作することを知っていますが、CE互換性をチェックしたいと思っていました。
それが他の誰かがDataSets(ここで豚)を使用せずにSQL Server CEにCSVタイプのファイルを取得する最速の方法を知っていないのですか?
いいえ、私はSqlBulkCopy
がサポートされているとは思わない( MSDNを参照)。おそらくxmlとしてデータを投げて、それをサーバーに取り除くのだろうか? SQL / XMLは2005/2008でかなり良いです。
また、table-value-parametersを調べることもできますが、CEがこれらをサポートしているかどうかは疑問です。
BULKCOPYはSQL CEではサポートされていません。あなたがあなたのテーブルに膨大な数の行を持っているなら、ここで最も速い方法です。挿入が遅すぎる!
using (SqlCeConnection cn = new SqlCeConnection(yourConnectionString))
{
if (cn.State == ConnectionState.Closed)
cn.Open();
using (SqlCeCommand cmd = new SqlCeCommand())
{
cmd.Connection = cn;
cmd.CommandText = "YourTableName";
cmd.CommandType = CommandType.TableDirect;
using (SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable))
{
SqlCeUpdatableRecord record = rs.CreateRecord();
using (var sr = new System.IO.StreamReader(yourTextFilePath))
{
string line;
while ((line = sr.ReadLine()) != null)
{
int index = 0;
string[] values = line.Split('\t');
//write these lines as many times as the number of columns in the table...
record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
record.SetValue(index, values[index++] == "NULL" ? null : values[index - 1]);
rs.Insert(record);
}
}
}
}
}
ベンチマーク:34370行のテーブル
インサート付き:38行/秒
この方法:毎秒260行の書き込み