- PR -

OLE DB エラーについて

1
投稿者投稿内容
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 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 エラーの重複エラーはどのように判別したらいいでしょうか?
ご指導お願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-20 14:11
こんにちは、じゃんぬ です。

引用:

insert文で重複エラーの判断をしたいのですが、エラーコードが分かりません。


とりあえず、トランザクションを開始して、
INSERT の前に重複データがあるかチェックしませんか?
例外 での判断をどうしてもしたいのであれば、
実際、その例外をおこし、Exception のインスタンスの中身を見てみましょう。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 2005-06-20 15:22
レスありがとうございます。
例外を起こしたのですが、ree.number=5
でいいよかったのかと思いスレをたてました。
例外を起こしたのですが
OleDb.OleDbExceptionのエラーコード「-********」
形のコードだったので、決められたコードがあればと思いました。
ありがとうございます。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-06-20 15:24
エラーコード単体が格納されているプロパティはないようです。
ORA-XXXXXのエラーコードを含んだエラーメッセージの取得方法であればこちらを参考にしてみて下さい。
ばなな
ベテラン
会議室デビュー日: 2005/06/16
投稿数: 91
投稿日時: 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には何も設定されていません。
色々調べているのですがわかりません
どうかご指導お願いいたします。

かい
常連さん
会議室デビュー日: 2003/05/27
投稿数: 34
投稿日時: 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/16
投稿数: 91
投稿日時: 2005-06-21 17:51
ありがとうございます。
同じ方法を取らせていただきました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-21 21:07
 きちんと確認したわけではないですが。。。

引用:

ora-00001のエラーが出ているので何らかのエラーが設定されているはずですがc.Errors(c.Errors.Count - 1).SQLStateには何も設定されていません。


 『何も設定されていません』というのは、どういう状況でしょう?
 まず、c.Errors.Countは、いくつになっていますか?MSDNには、『少なくとも1つ』とあります。
 また、なぜCount-1なのでしょう?普通、0から順番に見ませんか?
# 空のインスタンスを10個用意しておき、そのうち1番目しか使っていない
# なんてこともあり得る、、、とは、考えませんでした?

 あと、接続文字列のうち、Providerには何を指定していますか?たぶん、それによって設定されるものが変わってくると思います。


って、すでに終わったのかな?
_________________
1

スキルアップ/キャリアアップ(JOB@IT)