2017-07-16 20 views
0

私はこのようなコードを持っている:のSqlDataAdapter更新エラーの原因

DataTable dataTable; 

// filling table with data from db, closing connection 
// modifying table 

// trying to save it 
// "some_table" is the same table data was loaded from 

var connection = new SqlConnection(some_connection_string); 
var dataAdapter = new SqlDataAdapter("select * from some_table", connection); 
var cbMar = new SqlCommandBuilder(dataAdapter); 
SqlTransaction transaction = null; 

dataAdapter.InsertCommand = cbMar.GetInsertCommand(); 
dataAdapter.UpdateCommand = cbMar.GetUpdateCommand(true); 
dataAdapter.DeleteCommand = cbMar.GetDeleteCommand(true); 

transaction = connection.BeginTransaction(); 

dataAdapter.InsertCommand.Transaction = transaction; 
dataAdapter.UpdateCommand.Transaction = transaction; 
dataAdapter.DeleteCommand.Transaction = transaction; 

dataAdapter.Update(dataTable); 

そしてここでは、Updateで、私は例外を取得しています:

はのInt32に文字列からパラメータ値を変換に失敗しました。
のSystem.Exception {にSystem.FormatException}

のInnerException:
入力文字列が正しい形式ではありませんでした。私は、データベースの列を整数に文字列値を設定しているので、私は理解したよう
にSystem.FormatException

は、それがあります。

質問:この例外の原因となった列と行を正確に見つける方法を教えてください。

System.Data.dllの.pdbファイルをビルドすることができました。その中に入ることができますが、System.Data.dllから任意の変数を追加しようとしていますが、エラーが発生しています最適化されました。わかりましたが、System.Data.dllにはデバッグバージョンがありません。

+1

整数を含める必要があるDataGridCellの1つに、整数ではない値があります。 – Steve

+0

はい、私は控えめです。ここでの問題は、この表では数千の行と約150の列があることです。それらをすべてチェックするのは難しいです。エラーソースを自動的に見つける方法はありますか? – ilya

答えて

1

上記のコメントで説明したように、問題はおそらく整数値を含むと予想されるグリッドのセルによって引き起こされますが、そうではありません。あなたがもしブロック内でブレークポイントを置くと見ることができるデバッグ中にこの

.... 
dataAdapter.RowUpdated += onUpdate; 
.... 


private void onUpdate(object sender, SqlRowUpdatedEventArgs e) 
{ 
    Console.WriteLine(e.Row[0]); 
    if (e.Errors != null) 
    { 
     Console.WriteLine(e.Errors.Message); 
     Console.WriteLine("At row with key=" + e.Row["somecolumntoidentifytherow"]); 
    } 
} 

ようなコードを使用してSqlDataAdapterオブジェクトにRowUpdatedのイベントハンドラを追加することができ、無効なセルを含む行見つけること

無効な値を含むe.Rowオブジェクトの周りにあります。 (今はあなたがまだ見てitemarrayの150の列を持っている)。あなたは、このデータの壁をあなたのユーザに提供することは確実ですか?

+0

ありがとうございます、明日このソリューションを試してみましょう。ユーザーについて私は確信していません、私は開発者ではなく、ユーザーではありませんが、利用可能な列フィルターが多数あり、列の固定、列への高速ナビゲーションなどがあります。 – ilya

関連する問題