VB.NET(C#でもOK)で,ODBC経由で,PostgreSQLにDB接続する方法についてご教授ください。


(1)a.vbというコードを保存します。(内容はコメント欄1を参照)
(2)C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
上に前項のソースを置いて,

vbc /target:library /reference:"System.Data.dll" /reference:"System.dll" a.vb

とコンパイルします。

a.dllが生成されます。

(3)Apacheの公開ディレクトリに,前項のa.dllを配置します。
同じフォルダ上に,boo.htmlを配置します。(内容はコメント欄2を参照)

(4)IEで,
http://localhost/boo.html にアクセスします。

(5)「click」ボタンを押すと,SQLの事項結果が表示されてほしかったのですが,
alertで「要求が失敗しました。」というエラーメッセージが表示されます・・・。


正常にDB接続してレコードを取得するために,どう修正したらよいのでしょうか?

よろしくお願いします。
(コメント欄3に,参考URLを記載いたします。)

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2010/07/27 13:03:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:yamaneroom No.1

回答回数1040ベストアンサー獲得回数61

ポイント60pt

PostgreSQL ODBCによる接続

http://allabout.co.jp/gm/gc/47352/


System.Data.OdbcによるDBインタフェースのサンプル(VB.NET)

http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleOdbcDb...

id:language_and_engineering

情報の投稿をありがとうございました。

しかし,1つめのURLはODBCの基礎的な設定に関するもので,データソースの設定が終了した時点でこのページは特に必要が無いのではと思いました。

また,2つめのURLは,既にコメント欄にあるa.vbを私がコーディングするためにまさに利用したURLであり,新たに得るものはありませんでした。

2010/07/27 10:47:43
  • id:language_and_engineering
    コメント欄1:

    a.vbのソースコードです。



    Imports System.Data
    Imports System.Data.Odbc

    Namespace SampleNameSpace
    Public Class SampleControl
    Public Function Con(ByVal cs As String, ByVal sql As String)
    ' 接続
    Dim sqlcn As New OdbcConnection
    sqlcn.ConnectionString = cs
    sqlcn.Open()

    ' SQL発行
    Dim dt As New DataTable
    Dim trn As OdbcTransaction
    Dim sqlcmd As New OdbcCommand(sql, sqlcn, trn)
    Dim adapter As New OdbcDataAdapter(sqlcmd)
    adapter.Fill(dt)
    adapter.Dispose()
    sqlcmd.Dispose()

    ' 結果読み出し
    Dim ret As String = ""
    Dim i As Integer
    For i = 0 To dt.Rows.Count - 1
    ret = ret & dt.Rows(i).Item("id").ToString()
    Next

    ' 終了
    sqlcn.Close()
    Return ret
    End Function
    End Class
    End Namespace

  • id:language_and_engineering
    コメント欄2:

    boo.htmlの内容です。


    <html>
    <body>
    <object id="hoge" classid="a.dll#SampleNameSpace.SampleControl" width="100" height="100"></object>

    <!-- 接続文字列を入力 -->
    <input size="150" id="cs" value="DSN=my_dsn;Database=my_db;UID=username;PWD=password;">

    <!-- 実行したいSQLを入力 -->
    <input size="150" id="sql" value="SELECT * FROM fuga;">

    <br>
    <input type="button" value="click" onclick="exec_sql()">


    <script>
    function exec_sql()
    {
    var cs = document.getElementById("cs").value;
    var sql = document.getElementById("sql").value;

    try
    {
    var ret = document.getElementById("hoge").Con( cs, sql );
    alert( ret );
    }
    catch( e )
    {
    alert( e.message );
    }
    }
    </script>

    </body>
    </html>
  • id:language_and_engineering
    コメント欄3:

    わずかばかりの参考資料です。「IE上で.NETのDLLをホストする」というテーマの情報です。


    今から3分で,IE 上で .NET のDLLを動かそう (ブラウザ上で C# のコードを動かす方法)
    http://d.hatena.ne.jp/language_and_engineering/20100705/p1


    ブラウザ上でVB.NETのコードを動かす (IE上で.NETアプリケーションをホストする方法の続き)
    http://d.hatena.ne.jp/language_and_engineering/20100711/p1


    VB.NETのデータグリッドの利用方法についてお聞かせください。
    http://q.hatena.ne.jp/1278844101
  • id:degucho
    メッセージは全部書いた方が良いですよ。
    ブラウザでなければ動く状態ならこのへんでしょうか
    http://maruten.blog37.fc2.com/blog-entry-10.html
  • id:windofjuly
    うぃんど 2010/07/26 23:01:32
    簡単なやりとりで根本部分からお教えするのは難しいので要点だけコメントします

    今の処理の流れ
    【1】ブラウザはapacheにboo.htmlを要求
    【2】apacheはboo.htmlを返信
    【3】ブラウザはboo.htmlを解析してa.dllが必要な事を知りapacheに要求
    【4】apacheはa.dllを返信
    【5】ブラウザとapacheとの通信はひとまず完了し、ユーザーのアクション待ち
    【6】ユーザーのアクションでブラウザはa.dllを使ってPostgreSQLへの接続を行おうとする
    apache経由にもかかわらず、6の段階ではapacheを無視してPostgreSQLに直接接続しようとしているのが最大の問題点

    apache経由でなくてもブラウザのフォームやデータグリッドなどを利用してデータベースのインターフェースアプリを作ることはできますが、これまでの質問の流れからだとWEBサーバ経由でデータベース操作が目的なのでしょうね
    修正例としては
    【1】ブラウザはapacheにboo.htmlを要求
    【2】apacheはboo.htmlを返信
    【3】ブラウザとapacheとの通信はひとまず完了し、ユーザーのアクション待ち
    【4】ユーザーのアクションでブラウザはPostgreSQLからデータを持ってくることをapacheへ要求
    【5】サーバーサイドスクリプトでPostgreSQLからデータを取得し、ブラウザに返信
    【6】ブラウザは受け取ったデータをデータグリッドに配置して表示
    なお、4と5は非同期通信を用いてバックグラウンドで行うほうが見た目スマート
    6の段階ではじめてデータグリッドがでてきます

    apacheからdllを呼び出すこともできますが、それ以前にWEBアクセス(http通信)の基礎部分をあまりご存じないようなので、PostgreSQLからデータを抜き出す部分だけでもapache+phpのように楽に構築できる環境を用いて学んだほうが理解しやすいと思います。
    既存の環境を用いることをまずは学んで基本的なものを理解してから非同期通信について学んで実装したり、データグリッドについて学んだりして利便性を図るという流れにしないと、製作にいつまでかかるか正直わからないです
  • id:language_and_engineering
    @degucho様

    どうもありがとうございます。
    ご提示いただいたURLの手順に従って,セキュリティ設定を変更したところ,ブラウザ上でDBからのレスポンスを表示することができました!
    APサーバを経由せずに直接,ブラウザとDBとやり取りができたという事で非常に感動しました。

    コメント欄にはポイントが付かないにも関わらず,情報提供してくださり感謝します。
  • id:language_and_engineering
    @windofjuly様

    丁寧な解説を執筆してくださりありがとうございます。
    極めて初歩的な内容の解説とはいえ,要点をこのように簡潔にまとめて執筆なさるためにはお時間を取らせたのではないでしょうか。
    上の方と同じですが,コメント欄にはポイントが付かないにも関わらず,情報提供を試みてくださり感謝します。


    >apache経由にもかかわらず、6の段階ではapacheを無視してPostgreSQLに直接接続しようとしているのが最大の問題点
    >apache経由でなくてもブラウザのフォームやデータグリッドなどを利用してデータベースのインターフェースアプリを作ることはできます

    →これがまさに行ないたいことでした。


    説明不足で大変申し訳ないです。

    常識外れのことをやろうとしているので,とても誤解を生みやすかったかもしれません。
    今後は,回答者の方々に誤解を生まぬように注意して質問文を起票したいと思います。



    @degucho様

    >メッセージは全部書いた方が良いですよ。
    なお,メッセージは本当にこれだけでした・・・。
    (「要求が失敗しました。」だけ)

  • id:language_and_engineering
    コメント欄で情報を提供してくださった
    id:degucho様と
    id:windofjuly様には,
    それぞれ50ポイントずつ送信させていただきました。

    どうもありがとうございました。
    引き続きよろしくお願いいたします。
  • id:cx20
    language_and_engineering さん>

    興味深い内容でしたので紹介されていた記事を拝見致しました。

    残念ながら、ブログのコメント欄が利用できないようでしたので、
    こちらに気になった点を書かせて頂きます。

    > 今から3分で,IE 上で .NET のDLLを動かそう (ブラウザ上で C# のコードを動かす方法)
    > http://d.hatena.ne.jp/language_and_engineering/20100705/p1

    上記にて紹介されている記事の内容についてですが、
    手順(1)~(6)の他に URL を「信頼済みサイトに追加する」の手順が必要では無いでしょうか?

    おそらくは、記事の趣旨としては、
    「実験的に .NET で作ったコントロールも ActiveX のように貼り付けて利用できることを体感ししてみましょう」
    ということだとは思いますが、
    外部サイトを信頼済みサイトに追加したりセキュリティを下げるような設定の変更は、
    システムを危険にさらすことになります。

    記事の内容を読んで、実際に設定変更を行う人が、どのくらいいるかは不明ですが、
    「設定変更は、自己責任で行ってください」の記述は入れておいた方が良いと思われます。

    以下は、参考情報です。

    <参考情報>
    ■ やさしいセキュリティ講座(5) - やさしいセキュリティ(ActiveX)
    http://eazyfox.homelinux.org/security/beginner/beginner05.html
    ■ ITmedia記事が危険なHTAで外部サイトの表示を薦めている - スラッシュドット・ジャパン
    http://slashdot.jp/security/article.pl?sid=07/03/05/0829201
  • id:language_and_engineering
    id:cx20様,

    こんにちは(夜ですが)

    文法最速マスター系の記事で大変世話になっております。
    コメントして下さりありがとうございます。

    >外部サイトを信頼済みサイトに追加したりセキュリティを下げるような設定の変更は、
    >システムを危険にさらすことになります。
    >「設定変更は、自己責任で行ってください」の記述は入れておいた方が良いと思われます。

    これは,非常に重要な点ですね。書き漏れておりました。
    さっそく元記事に加筆しておきました。
    ご指摘に感謝します。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません