0

Windows Mobile 6.1 の SQL Server CE に 5 つ以上の lac レコードを挿入したい

私が使用しているコードは、毎秒約 8 行を取っています。それはただ耐え難いです。

私のコードは次のとおりです-DataTable約5つのlacレコードがあります:

     SqlCeCommand cmd1;
        for (int i = 0; i < table.Rows.Count; i++)
        {
            cmd1 = new SqlCeCommand("Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "')", con);
            con.Open();
            cmd1.ExecuteNonQuery();
            con.Close();
        }

より高速な代替手段 (できれば一括挿入) を提案してください。

4

3 に答える 3

0

パラメータを安全に追加するために SqlCommand を使用していないため、次のようにします。

SqlCeCommand command = conn.CreateCommand();
command.CommandText = "INSERT INTO Master (MasterValue) VALUES (@masterValue)";
SqlCeParameter param = null;
param = new SqlCeParameter("@masterValue", SqlDbType.Text);
command.Parameters.Add(param); 
command.Parameters["@masterValue"].Value = table.Rows[i].ItemArray[0].ToString();

文字列連結を使用して、すべての挿入を含む長い文字列を作成することができます (これはあまりクリーンな方法ではありませんが、データを知っていて安全でない挿入を行うことに問題がない場合は、これがオプションになる可能性があります)。

string insert = string.Empty;
for(int i = 0; i < table.rows.Count; i++)
{
    insert += "Insert into Master values('" + table.Rows[i].ItemArray[0].ToString() + "');";
    if(i % 1000 == 0 || i+1 == table.rows.Count)
    {
        using (SqlCommand cmd1 = new SqlCommand(insert, con))
        {
            con.Open();
            cmd1.ExecuteNonQuery();
            con.Close();
            insert = string.Empty;
        }
    }   
}

各挿入の最後にセミコロンがあることに注意してください。これは、挿入を個別に実行するために必要です。一度に行いたいインサートの数にモジュラスを調整します。

于 2013-11-08T12:13:57.613 に答える