- PR -

Fillメソッドでのエラー(.NET Remoting、ADO.NET)

投稿者投稿内容
セリカ
会議室デビュー日: 2006/12/18
投稿数: 12
投稿日時: 2006-12-18 13:09
はじめまして。セリカといいます。
.netを初めてまだ2週間くらいの未熟者です。
よろしくお願いします。

.NET Remotingを使い遠隔でOleDbDataAdapterのFillメソッドを実行すると
エラーが発生してしまいます。

<エラー内容>
System.Data.OleDb.OleDbException: 'PostgreSQL.1' は失敗しましたが、エラー メッセージはありません。結果コードは -2147221163(0x80040155) です。

Server stack trace:
場所 System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr)
場所 System.Data.OleDb.OleDbDataReader.NextResult()
場所 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
場所 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
場所 OcRemoteObject.src.server.dao.TestDAO.select(String firstValue) 場所 C:\\Documents and Settings\\user\\デスクトップ\\技術検証用(20061218)\\LayerTest\\OcRemoteObject\\src\\server\\dao\\TestDAO.cs:行 58
場所 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
場所 System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
場所 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
場所 OcRemoteObject.src.server.dao.TestDAO.select(String firstValue)
場所 Client.src.client.business.TestLogic.select(String firstValue) 場所 C:\\Documents and Settings\\user\\デスクトップ\\技術検証用(20061218)\\LayerTest\\Client\\src\\client\\business\\TsetLogic.cs:行 54

---エラーここまで---

<環境>
実行環境:WindowXP SP2
開発環境:VisualStudio2005
言語:C#
DB:PostgresSQL
接続方法:ADO.NET(OleDbで接続)
通信:.NET Remoting(TCP、Windowsサービスを立ち上げてます)

リモートでなく(.NET Remotingを使わず)、ローカルマシンで実行すると、
エラーは発生しません。

同じような状況に陥った事のある方や
解決方法をご存知の方、ご教授ください。
よろしくお願いいたします。

(「コンソールアプリケーションやWindowsサービスでは、Fillメソッドを使えない」、
なんて情報がありましたら教えてください。)

以下ソースです。
(ローカルマシンで実行しらたうまくいくので問題はないと思うのですが・・・)

public DataSet select(String firstValue)
{
DataSet dataSet = new DataSet();
OleDbConnection connection = new OleDbConnection(ConnectionString);
StringBuilder sql = new StringBuilder("");
sql.Append("select * from m_test");
sql.Append(" where a.first like '" + firstValue + "%'");

connection.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql.ToString(), connection);
connection.Close();
adapter.Fill(dataSet,"m_test"); // ここでエラーが発生します。

return dataSet;
}


[ メッセージ編集済み 編集者: セリカ 編集日時 2006-12-18 13:30 ]

[ メッセージ編集済み 編集者: セリカ 編集日時 2006-12-18 13:34 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-12-18 13:50
http://www.google.co.jp/search?hl=ja&c2coff=1&q=0x80040155+postgres&lr=lang_ja
PostgresSQLのデータプロバイダのバグっぽいような・・・?

引用:
リモートでなく(.NET Remotingを使わず)、ローカルマシンで実行すると、 エラーは発生しません。


リモートサーバを実行しているマシンのプロバイダのバージョンは古くって、ローカルマシンのは新しいんじゃないかなぁ。

はずしてたらごめんなさいね。
セリカ
会議室デビュー日: 2006/12/18
投稿数: 12
投稿日時: 2006-12-18 15:04
かめたろさん、返信ありがとうございます!

引用:
PostgresSQLのデータプロバイダのバグっぽいような・・・?



やっぱりこれってバグですか・・・

引用:

リモートサーバを実行しているマシンのプロバイダのバージョンは古くって、ローカルマシンのは新しいんじゃないかなぁ。



プロバイダのバージョンには問題なさそうです。
今、DBをAccessMDBに変えて実行したら、上手いこと成功しました。
.netで、N層アプリケーションを作成するとき、
みなさん、どんな方法でマシン間のデータ通信をしているんでしょう・・・
.NET Remoting以外ってどんな方法を選択しているんでしょうか。。。


[ メッセージ編集済み 編集者: セリカ 編集日時 2006-12-18 15:08 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-12-18 16:31
引用:
プロバイダのバージョンには問題なさそうです。


そうですか・・・。でも、リモーティングだからデータアクセスできないってケースが想定できないんですよねぇ。

引用:
今、DBをAccessMDBに変えて実行したら、上手いこと成功しました。


あれ?これ、問題があるかないかの確認方法ですか?だとしたら、ちと違うかと。確認して欲しかったのは、「PostgresSQLのプロバイダ」です。オレの表現が間違ってるのかな。ドライバって言ったほうがいいのかな。

http://archives.postgresql.org/pgsql-bugs/2005-11/msg00134.php
pgoledb driver 1.0.0.19 にバグがあるっぽいので

http://pgfoundry.org/projects/oledb/
最新は 1.0.0.20 のようなので、コレで試すことはできますか?
セリカ
会議室デビュー日: 2006/12/18
投稿数: 12
投稿日時: 2006-12-18 18:01
引用:

そうですか・・・。でも、リモーティングだからデータアクセスできないってケースが想定できないんですよねぇ。



そうですよね、僕も.net初心者ですが、「だからデータアクセスできない」っていうのが、腑に落ちないです。他に原因があるような気がして・・・。

引用:

あれ?これ、問題があるかないかの確認方法ですか?だとしたら、ちと違うかと。確認して欲しかったのは、「PostgresSQLのプロバイダ」です。オレの表現が間違ってるのかな。ドライバって言ったほうがいいのかな。



すみません。こちらの勘違いでアプローチの仕方が不味かったです。
で、早速、バージョンを調べてみました。
ですが、バージョンは1.0.0.20でした。。。

他にDataSetにSELECT文結果を取得する方法というと、OleDbDataReaderで
ループ回して追加していく方法しかないんでしょうか・・・。
憶測で実験したわけではないですが、Fillメソッドを使うよりはパフォーマンスが
落ちてしまいそうな気がしますが・・・とりあえず、この方法も試してみます。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-12-18 19:06
引用:
で、早速、バージョンを調べてみました。
ですが、バージョンは1.0.0.20でした。。。


そっすかー・・・。んじゃ、リモートしてる時とそうでないときの差はなにかって考えると、実行アカウント辺りかなぁ。サーバ側では、リモートサーバをホストしているサービスのアカウントで実行されてたような・・・。そのアカウントになんらかの権限が必要なのかなぁと想像します。(オラクルだと、Oracleホームディレクトリへの適切なアクセス権が必要みたいだし)

引用:
他にDataSetにSELECT文結果を取得する方法というと、OleDbDataReaderで
ループ回して追加していく方法しかないんでしょうか・・・。


OleDbDataReader も同様なような気がしますが、どうなんでしょうね・・・。

もうこれ以上なんも思いつかないなー。識者の方の登場を待つか、Database板の方に書き込めばあっさり解決するかもしれません。

--追記
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29354&forum=7
これかなー

[ メッセージ編集済み 編集者: かめたろ 編集日時 2006-12-18 19:26 ]
セリカ
会議室デビュー日: 2006/12/18
投稿数: 12
投稿日時: 2006-12-18 22:11
引用:

OleDbDataReader も同様なような気がしますが、どうなんでしょうね・・・。

もうこれ以上なんも思いつかないなー。識者の方の登場を待つか、Database板の方に書き込めばあっさり解決するかもしれません。



かめたろさんの予想通り、OleDbDataReaderでもダメでした。
これは、もうDB側の問題のようなので、アドバイスして頂いたようにDB板の方に
書き込みしてみます。

もし、何か情報があったら、引き続きこちらの板でもかまいませんので、
よろしくお願いいたします。

かめたろさん、ありがとうございました。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-12-19 10:02
役立たずでスミマセン (-_-;
OLE-DBの他に .Net data providerの Npgsql 1.0 がリリースされてるので、そっちを試すのもありかなと思います。
http://pgfoundry.org/projects/npgsql
またはODBC。もう逃げの手しか思い浮かびません。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2006-12-19 10:39 ]

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