2011-12-09 6 views
0

SQLのバッチクエリを実行する方法は?例えば

StringBuilder query = new StringBuilder(); 

        foreach (KeyValuePair<string, string> key in list) 
        { 
         string name = key.Key; 
         string emails = key.Value; 
         query.AppendFormat("insert into contacts(name, emails) values('{0}', '{1}');", name, emails); 
        } 

    string queries = query.ToString(); //how to run it? 

ことは可能ですか?

+0

私は思っています...あなたは物事のリストをバッチ挿入したいのですか、あるいは一連の選択から複数のデータセットを取得したいですか? – Martin

答えて

1

ループの前にトランザクションを開始し、それぞれの文をstringbuilderに追加するのではなく実行し、ループの後にコミットするか、またはn個のレコードごとにコミットすることをお勧めします。

また、あなたは、の線に沿って何かパラメータ化コマンドを使用する必要があります。また

SqlCeCommand oCommand = conn.CreateCommand(); 
oCommand.CommandText = "insert into contacts(name, emails) values(?, ?)"; 
// I can't remember if the param names need @ or not 
oCommand.Parameters.Add("@name", SqlDbType.VarChar); 
oCommand.Parameters.Add("@email", SqlDbType.VarChar); 

SqlCeTransaction oTrans = conn.BeginTransaction(); 
try { 
    foreach (KeyValuePair<string, string> key in list) { 
    oCommand.Parameters[0].Value = key.Key; 
    oCommand.Parameters[1].Value = key.Value; 
    oCommand.ExecuteNonQuery(); 
    } 
    oTrans.Commit(); 
} catch (Exception ex) { 
    oTrans.Rollback(); 
} 

を、あなたはCodePlexのからSQL Compact Bulk Insert Libraryを使用することができます。私はこれがSqlCeResultSetの上にTableDirect SqlCeCommandを使用していると信じています.SqlCeResultSetはクエリプロセッサをバイパスして、できるだけ早く取得する必要があります。

+0

ハム、私はそれをやった、私はこれに代わるものを探しています。 –

+0

追加オプションで更新されました。 –

1

コンパクトエディションのV3.5ではサポートされていません。それがV4で変更されたかどうかは不明です。

接続/トランザクションとループの開始は本当に唯一の選択肢です。

申し訳ありません、悪いニュースです!

+0

変更されませんでした。まだサポートされていません。 – codekaizen

関連する問題