• 締切済み

postgreSQL を OleDB 接続

postgreSQL が Linux:CentOS上にあり OS:Windows Vista 開発環境 : VisualStudio 2005 言語 : C# ソフトを開発しております、接続は正常に終了(OleDbConnectionのOpen())するのですが 読み込みコマンドが失敗します(OleDbDataAdapterのFill) "'PostgreSQL OLE DB Provider' は失敗しましたが、エラー メッセージはありません。結果コードは -2147221163(0x80040155) です。" 解決方法をご存知のかたいらっしゃいますでしょうか?

みんなの回答

回答No.2

ANo.1です。 PgOleDbのバージョンを書き忘れました。 1.0.0.20です。 お使いのPgOleDbのバージョンが1.0.0.19の場合、 ドライバー側にバグがあるようです。

回答No.1

こんにちわ。 PostgreSQLとのOLE DB 接続なのでPgOleDbを使用しているって事でしょうかね? こちらの環境では正常に接続、SQL発行ができましたが・・・ VBのソースですので適宜読み替えてください。 Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection Dim cStr As String = "Provider=PostgreSQL OLE DB Provider;Data Source=[サーバ];Location=[DB];User ID=[ユーザ];Password=[パスワード]" conn.ConnectionString = cStr conn.Open() Dim sql As String = "[SELECT文]" Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, conn) Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd) Dim ds As New DataSet Dim dt As DataTable da.Fill(ds) dt = ds.Tables(0) Me.DataGridView1.DataSource = dt da.Dispose() cmd.Dispose() conn.Close() conn.Dispose() conn = Nothing また、他にも同様の現象の記事がありますので参考になれば。 (もう既に見ているかもしれませんが。。。) 「Fillメソッドでのエラー」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35607&forum=7 Npgsqlの使用も検討してはどうでしょうか?

関連するQ&A

  • C♯、PostgreSQLでDB接続用クラスを作りたい。

    開発環境はC♯、DBはPostgreSQLです。 DBアクセス用に共通的に使うクラスを作りたいと思っています。 やりたいことは、 ・接続文字列はapp.configから取得 ・コネクションのプーリング(絶対ではないので出来ない、または メリットがないのであればやらなくても構わない) 以下、途中ですが、書いてみたソースです。 --------ここから using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Data.Common; using System.Text; using System.Data.OleDb; namespace InventoryMngProtoType { class DataBaseAccess { //グローバル変数 string connectString; //DB接続用共通クラス //DataReader、DataSet… public DataBaseAccess() { //接続文字列等設定 connectString = System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString; OleDbConnection con = new OleDbConnection(connectString); //コネクションオープン if (con.State == ConnectionState.Closed) { con.Open(); } } public DataSet Getdataset(string sql) { System.Data.DataSet ds = default(System.Data.DataSet); //パラメタのSQLを投げ、データを取得、DataSetで返す。 System.Data.OleDb.OleDbDataAdapter MyCommand; MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString); ds = new System.Data.DataSet(); MyCommand.Fill(ds); return ds; } } } --------ここまで --appconfigの内容 <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="DatabaseConnection" connectionString="Data Source=localhost" providerName=" PostgreSQL OLE DB " /> </connectionStrings> </configuration> -- まずはSQLをDataSetで返すメソッドから作ろうとしています。 コンストラクタでコネクションを開いておいて、Dispose用の メソッドを用意して、そこで閉じるような作りを考えています。 しかし、 >MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString); ここで接続文字列が第二引数として必要なようなので、結局、 ここでもコネクションを開くことになるのでしょうか? C♯に慣れていないため、全般、作りについてアドバイス いただけたらと思います。 よろしくお願いします。

  • VB.netでJet.OLEDBを使いCSVを読み

    VB.netでOleDbConnectionを使ってCSVを読み込むと便利ですが、属性判定を勝手にされたくありません。 どうすればコントロールできますか? 個別に属性を決めるか、もしくは全部文字列として受け取りたいです。 何もしなければ、項目の属性が自動で決まりますが、その属性判断が甘く、属性に合わない値が消えます。 例えば、 日付項目っぽい値が入っている項目にたまに文字列がるとすると、 その項目が日付項目になって、日付項目に合わないデータは空白になってしまいます。 CSVの読み込みは一旦すべて文字列にして受け取り、その後の事はアプリでコントロールしたいです。 どうすればできますか? Dim OleDbConnection1 As New OleDb.OleDbConnection Dim OleDbCommand1 As New OleDb.OleDbCommand Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter Dim FileInfo1 As New FileInfo(CSVファイルの名前をフルパスで) OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote OleDbConnection1.Open() OleDbCommand1.CommandText = "SELECT * FROM [" & FileInfo1.Name & "]" OleDbCommand1.Connection = OleDbConnection1 OleDbDataAdapter1.SelectCommand = OleDbCommand1 OleDbDataAdapter1.Fill(DataTable1) OleDbDataAdapter1.Dispose() OleDbCommand1.Dispose() OleDbConnection1.Dispose()

  • OLEDB.NETで接続できない

    OS:XP 開発:VB 2008 .NET Framework 2.0 MDAC2.5 DB:Oracle9i(サーバー)、Oracle8i(クライアント) 以下のようにOracle Provider for OLEDBで接続を試みるもエラーに なります。 Dim con As New OleDbConnection() con.ConnectionString = "Provider=OraOLEDB.Oracle;User Id=scott;" & _ "Password=tiger;Data Source=Oracle;OLEDB.NET=True;" con.Open 結果は、「'OraOLEDB.Oracle'プロバイダーはローカルのコンピュータ に登録されていません。」のエラーになります。 環境変数のPATHに、[OralceHome]\binは定義されていますし、Oracle Provider for OLEDB はインストールされているのを確認しました。 因みにですが、ODP.NETでの接続ができるのですがよく分からない 状態です。あまり.NETやOracleの知識がないので詳しく伝えれないの ですが、デバッグ実行時はエラーになるのに、EXE単体で実行した場合 には問題なく接続できている状態です。ODP.NETは、クライアントが Oracle9R2からだったら使えるようなことがどこかに書いてあったので このようにデバッグ時とEXE単体実行時で異なるのかと思います。 デバッグ時には、接続オープンエラーになります。 そのような経緯でOLEDB.NETでは、正常に動作するであろうと思い修正 に踏み切ったのですが、うまくいきません。.NET側での参照設定などの 設定がいけないのでしょうか?それとも他に原因があるのでしょうか? かなり悩んでいるので原因と対処方法の分かる方がおられましたら、 ご教授よろしくお願い致します。

  • VB.NETからのMDBへのデータ接続について教えてください。

    またまたお世話になります。 いろいろ教えていただきながらほとんど出来上がって今最後のログオン部分を作成中です。 VB.NET2003、アクセス2000使用です。 参考にしている本がAccess使いではなくMSDEを使用しているため、データ接続の部分が毎回違っています。 各フォームなどでは余り気にせずに進めたのですが、このログオン処理のところだけ引っかかって進むことが出来ません。 データリンクプロパティでAccessの場合はMicrosoft Jet4.0 OLE DB Providerを指定しなければならないようですが、この場合、Oledbconnectionが作成されます。 MSDEの場合、Sqlconnectionが作成されSQLは以下のように書かれます。 Dim cmd As Sqlclient.Sqlcommand = Sqlconnection1.CreateCommnad() Dim dr As SqlClient.SqlDataReader 'コマンドのコネクション設定 cmd.Connection = SqlConnection1 'コネクションを開く SqlConnection1.Open() OledbConnectionを使って書くにはどういう修正をしたらいいのか、ご教示いただきたくお願いします。

  • PHPとPostgreSQLがつながらない

    PHPとPostgreSQLの初心者です。PHPとPostgreSQLを 使ってプログラムを作ろうと思ってます。 開発はPC上で、PostgreとPHPサーバはLinuxマシンに あります。まず最初にPostgreのインストールですが、 Fedora Core5 に着いていたPotsgreSQL8.1.3を入れ ました。設定としては、 postgresql.confでは listen_address='localhost,192.168.1.3' としました。192.168.1.3はLinuxマシンのローカル アドレスです。 pg_hba.confではconnectionのところで host all all 192.168.1.3 255.255.255.0 tyust としました。その後 host all all 0.0.0.0 255.255.255.0 tyust とかいろいろ試してみました。 一方PHPの方はほとんど何も設定をしていません。と いうか設定方法がよくわかりません。 以上の環境で、簡単なPHPプログラムをPostgreにつなげないで実行したところ問題なく動きました。 20行くらいのPHPを書いてみましたが、特に問題はあ りませんでした。 PostgreSQLの方は、PCからSSHで入って、接続テスト 用のDBを作り、テーブルも3つ作って、データを数件 Insertしました。 いよいよPHPからDBにつなぐことになったのですが、 プログラム上では以下のように書きました。 <?php    print "こんにちは"; $conn = pg_connect ('host=192.168.1.3 port=5432 dbname=phptest user=postgres');    print "こんばんは"; if (!$conn) { print "PostgreSQLへの接続に失敗です"; exit(); } else ・ ・ して実行したところ、「こんにちは」は表示されま したが、「こんばんは」以下はは表示しませんで した。$conn の先には進んでいないようです。 当然ここに書いた以外にも設定を変えてみましたが、 つながりませんでした。よろしくお願いします。

    • 締切済み
    • PHP
  • MFC ADOでSQL Serverに接続するには

    初心者の初めての質問です。ご教授よろしくお願いします。 開発環境は Microsoft Visual Studio Term System 2008 OS XP SP3 Microsoft SQL Server 2005 です。 VC++ MFC、SQL Serverでプログラムを組んでいるのですが、 今DB接続に困っています。 「Provider=MSDASQL;DSN=DB名;UID=ID;PWD=PassWord」の文字列を使ってDBとの接続ができますが、 一回目のトランザクションが失敗します。 エラー内容は 「 DbConnection::Transaction COM Error:80004005 Source:Microsoft OLE DB Provider for ODBC Drivers エラーを特定できません 」 です。 解決方法を教えて頂ければ幸いです。

  • WindowsにおけるPostgreSQL+C言語・C++

    C・C++初心者です。宜しくお願い致します。 サーバ等を配置しないで、WindowsXP(localマシン)にて、C言語またはC++より、PostgreSQL(win版)へ接続し、DB更新をするアプリケーションを作成したいと考えております。 PostgreSQLは、別のJavaアプリケーションから接続し操作しておりますが、その機能をC言語に移植したいというのが目的です。 上記より、開発環境を検討しておりますが、Windowsにおける、C言語+PostgreSQLの文献がなかなか見つからなく、途方に暮れてしまっている状態です。 現在、Borland C++Compiler5.5をコンパイラと考えており、PostgreSQLのVersionは8.2.5です。 大変申し訳ございませんが、C言語からPostgreSQLを操作する方法をご教授頂けますよう宜しくお願い致します。 尚、他のコンパイラであれば可能等、環境の見直しが必要でしたら、併せてご教授頂けますと幸いです。

  • ExcelVBAでのAccessデータベースとの接続

    ExcelのVBAによるAccessデータベースの操作を勉強中(始めたばかり)です。 ソフトバンク パブリッシング出版の「Excel VBA データベース構築」で勉強しているのですが、その中で、外部データとの接続に関して以下のような例文がありました。 Sub openADOdb() Dim myADOcon As ADODB.Connection Set myADOcon = New ADODB.Connection myADOcon.Open _ "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\残高DB.mdb" myADOcon.Close Set myADOcon = Nothing End Sub これを実行すると、myADOcon.Open ”Provider~ のところで、以下のエラーが発生しました。 実行時エラー’3706’: プロバイダが見つかりません。正しくインストールされていない可能性があります。 これはExcelもしくはAccessが正しくインストールされていないということなのでしょうか。対処法としてはどのような方法がありますか。 また、本には「プロバイダ名には、どのOLE DBプロバイダを使用するかをしていします。この文字列は、OLE DBプロバイダのマニュアルやヘルプを調べると記載されています。」と出ているのですが、OLE DBプロバイダのヘルプとはどのようにしたら見れるのでしょうか。 なお、Excel97とAccess97を使っています。 以上2点よろしくお願いします。

  • Linux上のpostgreSQLデータをWindowsでみたい

    サーバA(OS:Linux Fedora Core 4、データベース:PostgreSQL 8.0 で運用しているシステムがあり、毎日そのデータを下記のdumpコマンドで PostgreSQLの全データをバックアップしています pg_dumpall > postgres.out  サーバAを触るのは怖いので、別のマシンB(Windows-Xp)に postgresql-8.2.6をインストールしました。 このバージョンは、postgresqlとともに、pgAdmin3というGUIの管理 ツールもついていると聞きここに、サーバAからバックアップされている postgres.outをrestoreして pgAdmin3でデータベース・テーブル等をみようとしています (postgres.out)を使ってのリストアの仕方は (1)(postgres.out)をpostgresqlの/binディレクトリの中に入れる (2)psqlのメニューから次のコマンドを打つ psql -d manmg -f postgres.out   (3)pgAdmin3を立ち上げるとサーバAのDBは追加されているようなのですが  テーブルは(0)となって見えません マシンBの方のPostgreSQLについてはインストールしたままでサーバA のpostgresqlの設定等は何もしていません 何か設定する所はあるのでしょうか 上記手順でlinuxから吐出されたバックアップデータをWindowマシンに リストアする方法は間違っていないのでしょうか よろしくお願いします。

  • PostgreSQL LOCK TABLE

    はじめまして、小澤と申します。 PostgreSQL はあまり使う機会が無かったので、 実務期間数か月の初心者です。 数年前に作成されたサイトのメンテナンスをしております。 本番環境の DB は、更新することが出来ないので、 ローカルに開発環境を作って、修正作業を行っています。 本番環境と開発環境の、PostgreSQL のバージョンの違いによって 困っています。 PHP で、「LOCK TABLE ~ 」という処理があるのですが、 本番環境は問題なく実行できますが、開発環境で、下記のエラーがでます。 SQL エラー: ERROR: LOCK TABLEはトランザクションブロック内でのみ使用できます LOCK TABLE をトランザクションの BEGIN と COMMIT の中に 入れなさい、ということおt思います。 本番環境は、Linux バージョンは 7.3.4 開発環境の、Windows バージョンは 8.4.4 7.3.4 の頃には、トランザクション処理が無かったのか、 LOCK TABLE との関係が定義されてなかったのかもしれません。 開発環境の PostgreSQL のバージョンを 7.3.4 にしようと思い、 探したのですが、Windows 版はもう無いようです。 下記のことを教えて下さい。 1.開発環境の PostgreSQL の設定で、このエラーを出ないようにする 方法はないでしょうか。 2.Windows 版の PostgreSQL のバージョンを 7.3.4 が、 どこかにないでしょうか。 尚、ソースにトランザクション処理を追加するという方法も考えましたが、 修正箇所が多いので、難しいです。 メーリングリストにも出してます。マルチキャストですみません。 以上、宜しくお願いします。