トップ回答者
データベースの接続について

質問
-
AccessからVB+SQLSErverへの移行を勉強中なのですが、Accessの場合、非連結フォームを用いる場合は、データの取得・更新の際にデータベースへの接続・切断ということをしていたのですが、VBの場合は、どのようにすることが一般的なのでしょうか。
また、Accessでリンクテーブルを使用する場合は、
Con=CurrentProject.Connection
で指定をすることができたのですが、VBの場合は、ウィザードを使用してデータソースを作成でき、その最後のほうで、接続文字列を構成ファイルに保存するといった部分があったように思うのですが、こちらを活用することができるのでしょうか。
現在は、ConnectionStringに対して、直接記述をしているのですが、ヘルプを調べているうちに、System.Configurationという項目の何かを使用することで、保存してある接続文字列を取り出すことができるような記述がしてあったのですが、以下の部分でとまっています。
Dim ConStr As String = "HPSYSTEMSQLConnection"
ReadOnly Property Connectionstrings() As String
Get
Connectionstrings = ConStr
Exit Property
End Get
End Propertydim Con as New SqlConnection=(ここへの指定方法がわかりません。)
どうか、アドバイスをお願いします。
回答
-
Visual Basic Express EditionというIDEの機能として、リモートのデータベースへの接続はできません。ただし、あくまでIDEとしてサポートしていないということであって、コードで手動でconnectionを書いてあげれば接続することができます。IDEはあくまでコードを便利に効率的に作成するツールであって、その機能が、Visual Basic Express Editionでは一部制限されているということです。IDEがなくても、その気になれば、メモ帳だけあればプログラムが作れないわけではありません。ただし、かなり大変でしょうが。(^^;
すべての返信
-
TI-cb400s さんからの引用
Accessの場合、非連結フォームを用いる場合は、データの取得・更新の際にデータベースへの接続・切断ということをしていたのですが、VBの場合は、どのようにすることが一般的なのでしょうか。
VBというよりADO.NETは非接続型が中心です。イメージとしては、データベースからデータテーブルに値を取ってきて、すぐにデータベースとの接続が切れるという感じです。アプリケーションはデータベースから切り離されたデータテーブルを相手に動くことになります。もちろん、アプリケーションでデータテーブルの値を変更した後、データテーブルからデータテーブルへ書き戻さなければ、データベースへ反映されません。
ADO.NETでもDataReaderは接続型ですので、それを利用している間中、データベースへ接続されたままになります。TI-cb400s さんからの引用
VBの場合は、ウィザードを使用してデータソースを作成でき、その最後のほうで、接続文字列を構成ファイルに保存するといった部分があったように思うのですが、こちらを活用することができるのでしょうか。
できます。プロジェクトを右クリックしてプロパティを開き、設定を開いてください。そこに接続文字列を指定できます。それを使う時は、
Properties.Settings.Default.上で付けた名前
でアクセスできます。 -
ご回答ありがとうございます。
Properties.Settings.Default.上で付けた名前
を使用する際に、何か宣言が必要でしょうか。sqldatareaderをを使用するため、
Dim cmd as New SqlCommand("sp_disp_ptdata",cn)の「cn」の部分を「Properties.Settings.Default.上で付けた名前」に置き換えたところ「Propeties」のところに青の下線が引かれています。
Settingsをヘルプで見たところ、何か宣言が必要なようですが、それ以上がわかりませんでした。
教えていただいた、プロパティの設定の部分ですが、データソースウィザードを使用しても、そこにデータベースへの接続の情報が表示されるのですが、これを用いる場合も、教えていただいた方法で、使用することができるのでしょうか。
お返事が遅くなって申し訳ありませんでしたが、どうかよろしくお願いします。
-
TI-cb400s さんからの引用
Dim cmd as New SqlCommand("sp_disp_ptdata",cn)の「cn」の部分を「Properties.Settings.Default.上で付けた名前」に置き換えたところ「Propeties」のところに青の下線が引かれています。
このcnのところには、SqlConnectionオブジェクトが入ります。SqlConnectionの接続を指定するために、「Properties.Settings.Default.上で付けた名前」を使います。つまり、sqlConnection1.ConnectionStringに対して指定して下さい。TI-cb400s さんからの引用
教えていただいた、プロパティの設定の部分ですが、データソースウィザードを使用しても、そこにデータベースへの接続の情報が表示されるのですが、これを用いる場合も、教えていただいた方法で、使用することができるのでしょうか。
できます。実はこうやって指定する方が確実です。接続文字列を自動で生成してくれますので。TI-cb400sさんのペースでかまいませんので、がんばって下さい。
-
ご回答ありがとうございます。
trapemiya さんからの引用 このcnのところには、SqlConnectionオブジェクトが入ります。SqlConnectionの接続を指定するために、「Properties.Settings.Default.上で付けた名前」を使います。つまり、sqlConnection1.ConnectionStringに対して指定して下さい。 まず、この部分の「sqlConnection1」というのは、どこから出てきたのでしょうか。
接続状態を確認するために、以下のコードを作成しました。
Private Sub test2()
Dim Con As New SqlConnection(properties.settings.default.HPSYSTEMSQLConnectionString)Con.Open()
'接続状態を表示
MessageBox.Show("接続状態:" & Con.State.ToString, "処理結果")Con.Close()
'接続状態を表示
MessageBox.Show("接続状態:" & Con.State.ToString, "処理結果")
End Subしかし、やはり2行目の「properties」の部分に青い線が引かれて、「宣言されていません」とのメッセージが出ます。
この部分におけるわからない点は2つあり、「properties」の宣言はどこに、どのような形で行えばよいのか。記述自体はこの形で問題がないのか。です。
また、データベースへの接続を直接プログラムに記述する場合は、データベースへ接続する必要のあるモジュール(プロシージャ?すいません。この表現がよくわかりません)ごとにこのような宣言を行いデータベースへの接続を行えばよいのか。それとも、新しい項目の中にある、モジュールの中で、データベースへの接続文字列を宣言しておけばすべてのフォームから使用できるのか。
現在、Accessで作成しているものについては、外部データベースに接続する場合は、モジュールの中にデータベースをオープンするものとクローズするプログラムを記述しておき、callで呼び出しをしていました。
だいぶ、わかりにくい文章だとは思うですが、わからない点についてはご指摘ください。よろしくお願いいたします。
-
TI-cb400s さんからの引用
まず、この部分の「sqlConnection1」というのは、どこから出てきたのでしょうか。
SqlConnectionオブジェクトのつもりで書きました。誤解を招いてすみません。無視して下さい。TI-cb400s さんからの引用
しかし、やはり2行目の「properties」の部分に青い線が引かれて、「宣言されていません」とのメッセージが出ます。
ごめんなさい。私が示したのはC#の場合でした。VBでは違うようです。
My.MySettings.Default.名前
のようにしてみて下さい。TI-cb400s さんからの引用
また、データベースへの接続を直接プログラムに記述する場合は、データベースへ接続する必要のあるモジュール(プロシージャ?すいません。この表現がよくわかりません)ごとにこのような宣言を行いデータベースへの接続を行えばよいのか。それとも、新しい項目の中にある、モジュールの中で、データベースへの接続文字列を宣言しておけばすべてのフォームから使用できるのか。
どこからでも「My.MySettings.Default.名前」で参照できるはずです。 -
Visual Basic Express EditionというIDEの機能として、リモートのデータベースへの接続はできません。ただし、あくまでIDEとしてサポートしていないということであって、コードで手動でconnectionを書いてあげれば接続することができます。IDEはあくまでコードを便利に効率的に作成するツールであって、その機能が、Visual Basic Express Editionでは一部制限されているということです。IDEがなくても、その気になれば、メモ帳だけあればプログラムが作れないわけではありません。ただし、かなり大変でしょうが。(^^;