- - PR -
OLE DB エラーについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-20 13:55
データベース:Oracle10gです
insert文で重複エラーの判断をしたいのですが、エラーコードが分かりません。 Try ExecuteNonQuery() Catch OleDb.OleDbException OLE DB で重複の場合 Catch ex As Exception OLE DB 以外のエラー処理 End Try 上記のようにOLE DB エラー・以外で分けているのですが、 OLE DB エラーの重複エラーはどのように判別したらいいでしょうか? ご指導お願いいたします。 | ||||
|
投稿日時: 2005-06-20 14:11
こんにちは、じゃんぬ です。
とりあえず、トランザクションを開始して、 INSERT の前に重複データがあるかチェックしませんか? 例外 での判断をどうしてもしたいのであれば、 実際、その例外をおこし、Exception のインスタンスの中身を見てみましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-06-20 15:22
レスありがとうございます。
例外を起こしたのですが、ree.number=5 でいいよかったのかと思いスレをたてました。 例外を起こしたのですが OleDb.OleDbExceptionのエラーコード「-********」 形のコードだったので、決められたコードがあればと思いました。 ありがとうございます。 | ||||
|
投稿日時: 2005-06-20 15:24
エラーコード単体が格納されているプロパティはないようです。
ORA-XXXXXのエラーコードを含んだエラーメッセージの取得方法であればこちらを参考にしてみて下さい。 | ||||
|
投稿日時: 2005-06-20 19:29
重複コードの番号を確認したところ以下のように書きましたが
Catch c As OleDb.OleDbException dim err = c.Errors(c.Errors.Count - 1).SQLState ora-00001のエラーが出ているので何らかのエラーが設定されているはずですが c.Errors(c.Errors.Count - 1).SQLStateには何も設定されていません。 色々調べているのですがわかりません どうかご指導お願いいたします。 | ||||
|
投稿日時: 2005-06-21 17:38
かいです。
いーたさんの参照設定先で投稿させてもらったものです。
わたしもいろいろ調べたのですが、いーたさんの指摘にあるように、 エラーコード値だけで取得ができませんでした。 私の代替案として(C#です)、 catch (OleDbException cause) { System.Console.WriteLine(cause.Errors[0].Message) ; } として、Messageの中から文字列を取得するようにしました。 例として、Messageの中には、 ORA-01400: ("USER"."EMP"."AGE")にはNULLは挿入できません。 となっているので、「01400」の部分だけ抽出するようにするなど。 ばななさんにとって、いい解決策か分かりませんが、参考までに 投稿しました。 | ||||
|
投稿日時: 2005-06-21 17:51
ありがとうございます。
同じ方法を取らせていただきました。 | ||||
|
投稿日時: 2005-06-21 21:07
きちんと確認したわけではないですが。。。
『何も設定されていません』というのは、どういう状況でしょう? まず、c.Errors.Countは、いくつになっていますか?MSDNには、『少なくとも1つ』とあります。 また、なぜCount-1なのでしょう?普通、0から順番に見ませんか? # 空のインスタンスを10個用意しておき、そのうち1番目しか使っていない # なんてこともあり得る、、、とは、考えませんでした? あと、接続文字列のうち、Providerには何を指定していますか?たぶん、それによって設定されるものが変わってくると思います。 って、すでに終わったのかな? _________________ |
1