0

データベースに新しいレコードを追加しようとしています。

コードは当初

rsGroup.Open(ftSQL, Global.gADOConnection, false);
rsGroup.AddNew();

rsGroup["PANELIST_NUM"] = flPanelistNum;
rsGroup["USER_CREATED"] = Global.glUserNumberID;

rsGroup.AddNew() で最初のエラーが発生した場合 - 列 PANELIST_NUM は null を許可しません。
これは主キーであるためです。

これを修正するために、挿入メソッドを使用しようとしました-

strInsert1 = "INSERT INTO PANELIST_HEADER (PANELIST_NUM, USER_CREATED) VALUES (" + flPanelistNumber + "," + Global.glUserNumberID + ")";

System.Data.OracleClient.OracleCommand cmdCommand = new
System.Data.OracleClient.OracleCommand();

cmdCommand.CommandText = strInsert1;
cmdCommand.Connection = Global.gADOConnection;
cmdCommand.ExecuteNonQuery();

これを実行してもエラーは発生しませんが、無限ループに陥り、ExecuteNonQuery コマンドの後の次のコード行に進むことはありません。ループに陥っている理由はありますか、またはこのレコードをデータベースに正常に追加する別の方法はありますか?

4

1 に答える 1

1

ExecuteNonQuery メソッドがハングしている場合は、データベースでロックがかかっているように聞こえます (または、以前の呼び出しからのロックが解放されていません)。コード(少なくとも投稿したフラグメント)がループしていないため、実際には無限ループにはなりません。

また、示されているコードは SQL インジェクション攻撃に対して脆弱であるため、INSERT ステートメントをパラメーター化することを強くお勧めします。

于 2012-08-07T20:26:30.380 に答える