質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

Visual Studio 2015 PostgreSQL 接続&使用方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 10K+

niko2

score 13

前提・実現したいこと

Visual Studio 2015 でC#をシステムを開発しています。

現在、日々のトレーニングなどを記録するシステムのカレンダー部分を作っています。

実現したいことは、日付のlabelをクリックするとその日付の画面に飛び、その日の予定一覧が表示されることです。

日々の予定はPostgreSQLに格納してあります。

例:画像1の2016年9月7日のlabelをクリックすると画像2のフォームに移動し、その日の予定が入ることです。
イメージ説明
イメージ説明

「この質問の本題」

現在、ODBC 経由で PostgreSQL につなぐことを試みています。
(Npgsql を使うことが一般的だが、Visual Studio 2015には対応していないため、ODBCを使用)

しかし、下記のように、エラーメッセージが表示され、PostgreSQLへの接続が失敗しています。
Visual Studio 2015 にてPostgreSQLに接続できる方法を教えていただけないでしょうか?(今まで試したことは質問の最後まとめています。)

イメージ説明

発生している問題・エラーメッセージ

エラーメッセージOdbc Exception はハンドルされませんでした。(下の画像参照)


イメージ説明

該当のソースコード

string myConnection = string.Empty;
            myConnection += "DRIVER=PostgreSQL ANSI;";//"DRIVER=PostgreSQL;”でも試したが×
            myConnection += "SERVER=localhost;";
            myConnection += "DATABASE=db_football;";
            myConnection += "USERNAME=postgres;";

            OdbcConnection myConn = new OdbcConnection(myConnection);
            myConn.Open();

試したこと

  • 新しいデータソースの追加を行いODBC経由でPostgreSQLの必要なデータソースを用意することはできたが、DataGridView 以外の使用方法が不明で断念。

  • Npgsqlを使用しようとしたがVisual Studio2015には未対応。(参考にしたページ。http://symfoware.blog68.fc2.com/blog-entry-1229.html)

  •  myConnection += "DRIVER=PostgreSQL;";

    myConnection += "DRIVER=PostgreSQL ANSI;";
    に変更したが変化なし。
    (参考URL:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12104573057)

補足情報(言語/FW/ツール等のバージョンなど)

  • Npgsql を使うことが一般的だが、Visual Studio 2015には対応していないため、ODBCを使用。

  • ODBCは32ビットを使用。(OSは64bitだが、Visual Studioが32bitしかないため。)

  • PostgreSQL 9.5を使用。

  • myConnection += "USERNAME=postgres;";のパスワードは設定していないため、ソースに書かなくても問題ないと考え指定していません。(tacsheaven様からご指摘いただいき追記させていただきました。ありがとうございます。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

Visual Studio 2015で最新のNpgsqlを使用したら参考されたサイトのやり方で接続できました。
ただ、これからもデータベースを使用したプログラムを作成するおつもりでしたら、EntityFramworkがお勧めです。
NuGet

using Npgsql;
using System.Data;

namespace tera56195 {
    class Program {
        static void Main(string[] args) {
            StringBuilder sb = new StringBuilder();
            sb.Append("Server=localhost;");
            sb.Append("Port=5432;");
            sb.Append("User Id=postgres;");
            sb.Append("Password=****;"); //インストール時入れた値
            sb.Append("Database=test");

            string connString = sb.ToString();

            using(var con = new NpgsqlConnection(connString)) {
                con.Open();

                //データ登録
                var cmd = new NpgsqlCommand(@"insert into table01 values (6, 'testdata')", con);
                cmd.ExecuteNonQuery();

                //データ検索
                cmd = new NpgsqlCommand(@"select * from table01", con);
                var dataReader = cmd.ExecuteReader();
                while(dataReader.Read()) {
                    Console.WriteLine("{0},{1}", dataReader["id"], dataReader["name"]);
                }
                Console.Read();
            }
        }
    }
}


※test01テーブルはID(プライマリキー)とName(text)だけのテーブルです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/23 19:04

    HeyHeyHoさん

    回答ありがとうございます。
    ご指摘の通り以下のことを修正しましたら解決できました。
    ・Npgsqlのバージョンを再度検索し、最新のものを使用
    ・パスワードをインストールした時のものを使用
    パスワードに関しては、修正前は、ログインロール(ユーザー)postgresを作成ているため、そのパスワードだと勘違いしていました。インストール時のものを使用したら解決できました。

    EntityFramworkに関しては、今回はアプリケーションを作成する期限が迫っているため見送ることにしました。
    これからもデータベースを使用することはあると思うのでその時は参考にしてみようと考えています。情報ありがとうございます。

    前回に引き続きベストアンサーに選ばせていただきました。
    ありがとうございます。

    キャンセル

0

DB へのログインに必要なパスワードを指定してないように見えますが?
その性で

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/23 00:42

    tacsheavenさん、回答ありがとうございます。

    失礼しました。
    書き忘れましたが、パスワードは設定していないのでなしで問題ないと考え、指定していません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる