- - PR -
Fillメソッドでのエラー(.NET Remoting、ADO.NET)
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 2006-12-18 13:50
http://www.google.co.jp/search?hl=ja&c2coff=1&q=0x80040155+postgres&lr=lang_ja
PostgresSQLのデータプロバイダのバグっぽいような・・・?
リモートサーバを実行しているマシンのプロバイダのバージョンは古くって、ローカルマシンのは新しいんじゃないかなぁ。 はずしてたらごめんなさいね。 | ||||||||
|
投稿日時: 2006-12-18 15:04
かめたろさん、返信ありがとうございます!
やっぱりこれってバグですか・・・
プロバイダのバージョンには問題なさそうです。 今、DBをAccessMDBに変えて実行したら、上手いこと成功しました。 .netで、N層アプリケーションを作成するとき、 みなさん、どんな方法でマシン間のデータ通信をしているんでしょう・・・ .NET Remoting以外ってどんな方法を選択しているんでしょうか。。。 [ メッセージ編集済み 編集者: セリカ 編集日時 2006-12-18 15:08 ] | ||||||||
|
投稿日時: 2006-12-18 16:31
そうですか・・・。でも、リモーティングだからデータアクセスできないってケースが想定できないんですよねぇ。
あれ?これ、問題があるかないかの確認方法ですか?だとしたら、ちと違うかと。確認して欲しかったのは、「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 18:01
そうですよね、僕も.net初心者ですが、「だからデータアクセスできない」っていうのが、腑に落ちないです。他に原因があるような気がして・・・。
すみません。こちらの勘違いでアプローチの仕方が不味かったです。 で、早速、バージョンを調べてみました。 ですが、バージョンは1.0.0.20でした。。。 他にDataSetにSELECT文結果を取得する方法というと、OleDbDataReaderで ループ回して追加していく方法しかないんでしょうか・・・。 憶測で実験したわけではないですが、Fillメソッドを使うよりはパフォーマンスが 落ちてしまいそうな気がしますが・・・とりあえず、この方法も試してみます。 | ||||||||
|
投稿日時: 2006-12-18 19:06
そっすかー・・・。んじゃ、リモートしてる時とそうでないときの差はなにかって考えると、実行アカウント辺りかなぁ。サーバ側では、リモートサーバをホストしているサービスのアカウントで実行されてたような・・・。そのアカウントになんらかの権限が必要なのかなぁと想像します。(オラクルだと、Oracleホームディレクトリへの適切なアクセス権が必要みたいだし)
OleDbDataReader も同様なような気がしますが、どうなんでしょうね・・・。 もうこれ以上なんも思いつかないなー。識者の方の登場を待つか、Database板の方に書き込めばあっさり解決するかもしれません。 --追記 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29354&forum=7 これかなー [ メッセージ編集済み 編集者: かめたろ 編集日時 2006-12-18 19:26 ] | ||||||||
|
投稿日時: 2006-12-18 22:11
かめたろさんの予想通り、OleDbDataReaderでもダメでした。 これは、もうDB側の問題のようなので、アドバイスして頂いたようにDB板の方に 書き込みしてみます。 もし、何か情報があったら、引き続きこちらの板でもかまいませんので、 よろしくお願いいたします。 かめたろさん、ありがとうございました。 | ||||||||
|
投稿日時: 2006-12-19 10:02
役立たずでスミマセン (-_-;
OLE-DBの他に .Net data providerの Npgsql 1.0 がリリースされてるので、そっちを試すのもありかなと思います。 http://pgfoundry.org/projects/npgsql またはODBC。もう逃げの手しか思い浮かびません。 [ メッセージ編集済み 編集者: かめたろ 編集日時 2006-12-19 10:39 ] |