いつもお世話になっております、ヨシポンです。
開発環境は、VS.NET 2003のVBで、
現在ADO.NETを使うプログラムを書いているのですが、
ADO_rs.Find("ID = '" & ID & "'", 0, ADODB.SearchDirectionEnum.adSearchForward)
というメソッドで、
'System.Runtime.InteropServices.COMException' のハンドルされていない例外が Server.exe で発生しました。
追加情報 : 行セットの後方スクロールをサポートしていません。
と吐かれます。
きちんと、上のメソッドの前には
ADO_rs.MoveFirst()
も実行しています。
また、DBは接続テストも行っています。
もちろん、「ID」という名前のフィールドも存在しています。
何が原因なのでしょうか??よろしくお願いします。
ちなみに・・・
ADO.NET と書かれていますが、ただ単に、ADODBを参照設定して
使っているだけではないですか?
以上。
> 現在ADO.NETを使うプログラムを書いているのですが、
これ自体は、ADO.NET ではなく、ADO のコードですよね。(^^;
> 追加情報 : 行セットの後方スクロールをサポートしていません。
Findメソッドの第2引数を指定したので、.Supports(adBookmark) の
サポートが求められたのでしょう。
使用している Recoredset が、前方スクロールタイプの物になっていませんか?
レス、ありがとうございます。
プログラミング歴が短いのでそのあたりはよくわからないのですが、私が使っているのは参照設定のところでADODBっていうのを追加しているだけです。
それと、魔界の仮面弁護士さん、
>> 現在ADO.NETを使うプログラムを書いているのですが、
>これ自体は、ADO.NET ではなく、ADO のコードですよね。(^^;
というのはどういうことでしょうか??
魔界の仮面弁士の言うとおり、第二引数を1にすると大丈夫でした。
ありがとうございました。
それと、第二引数の意味がよくわからないのですがそれも教えて頂けるとうれしいです。
すいません、
魔界の仮面弁士さんの間違いです。
> それと、魔界の仮面弁護士さん、
> 魔界の仮面弁士の言うとおり、
(^^;
> 魔界の仮面弁士さんの間違いです。
(^^;;;
>>> 現在ADO.NETを使うプログラムを書いているのですが、
>>これ自体は、ADO.NET ではなく、ADO のコードですよね。(^^;
>というのはどういうことでしょうか??
えぇと、文字通りの意味ですよ。
(ADO と ADO.NET は、名前が似ているだけで、全然別物ですよね)
端折って書けば、ADODB 関連のものは、「ADO」のもので、
System.Data 関連のものが「ADO.NET」のものとなります。
で、VB6 では、ADO.NET を使えませんが、VB.NET では、ADO と ADO.NET の
両方を使う事ができます。ただし、VB.NET からの ADO の利用は推奨されて
いません。できるだけ、ADO.NET を使った方が無難でしょう。
なぜなら、ADO を使う場合には、.NET と ActiveX 間の変換処理
(マーシャリング)が発生する分、ADO.NETよりも効率は落ちるからです。
また、各クラスの使用後には、Marshal.ReleaseComObject メソッドを
呼び出して、使用したオブジェクトを解放しなければならないなど、
余計な手間がかかるというのも、理由の一つです。
> 第二引数を1にすると大丈夫でした。
うーん。そういう問題でも無かったりします。
たとえばそれだと、現在行が検索されなくなりますよね。
そもそもは、カーソルタイプの問題だと思いますので、Recordset を
生成している部分を見直して、他のカーソルモードに変更してみてください。
(たとえば、キーセットカーソルや静的カーソルタイプなどに)
http://support.microsoft.com/kb/294139/en-us
前方スクロールタイプでは効率が悪い上に、今回の用途には向きませんので…。
> それと、第二引数の意味がよくわからないのですがそれも教えて頂けるとうれしいです。
第4引数と組み合わせて使うものです。
MDAC SDK にて、Recordset オブジェクトの Find メソッドについて調べてみてください。
魔界の仮面弁士さん、大変いろいろご伝授して頂きありがとうございました。
これで当分は大丈夫だと思います。(何しろ、中3なもので・・・)
ツイート | ![]() |