2011-06-19 8 views
2

SQL CEを使用してアプリケーションにデータを格納しています。私は周りに3000回のためにそれを実行した後、以下のコードでエラーが発生しました:.NET SQL CEコア - この操作を完了するのに十分なストレージがありません

エラーがLIVEアプリケーション上で起こっている「足りない記憶域がこの操作を完了するのに利用可能です」。

SqlCeConnection connection; 
SqlCeTransaction transaction; 

try 
{ 
    connection = new SqlCeConnection(connectionString); 
    connection.Open(); 
    transaction = connection.BeginTransaction(); 
    SqlCeCommand deleteCmd = connection.CreateCommand(); 
    deleteCmd.CommandText ="Delete from EJData where [email protected]"; 
    deleteCmd.Parameters.Add("@id", SqlDbType.Int, Int32.MaxValue.ToString().Length, "ID"); 
    adapter.DeleteCommand = deleteCmd; 
    adapter.DeleteCommand.Transaction = transaction; 
    DataRow[] r = dataSet.Tables[0].Select("ID >=" + firstRecordID + " and ID<=" + lastRecordID); 
    foreach (DataRow row in r) 
    { 
     row.Delete(); 
    } 

    adapter.Update(dataSet,"EJData"); 
    transaction.Commit(CommitMode.Immediate); 
    transaction.Dispose(); 
    transaction = null; 
} 

catch (...) 

{ 
    ... 
} 

finally 

{ 
    if (adapter.DeleteCommand != null) 
    { 
     adapter.DeleteCommand.Dispose(); 
    } 

    connection.Close(); 
} 
+1

3000回 - このメソッドを3000回呼び出しますか?または、ループ内に3000個のアイテムを含む1つのコール?私は、トランザクションが単純に大きすぎると思っています。そして、より小さなトランザクションが成功するかもしれません。 –

+0

GC.Collect();を追加してみてください。 connection.Closeの後に(); – Dementic

答えて

0

パラメーターは、この使用宣言時: deleteCmd.Parameters.Add( "@ ID" を、SqlDbType.Int、 "ID")。

関連する問題