none
テーブルアダプタを使用したデータベースで接続文字列OleDb.OleDbConnectionを動的に変更するには RRS feed

  • 質問

  • いつもお世話になっております。

     

    現在、テーブルアダプタを使用して任意のMdbデータベースから読込、更新を行っています。

    テーブルアダプタの接続文字列については、データセットデザイナのプロパティで設定しています。

    ここで質問なのですが、接続文字列が一定ではなく、例えばwindowsフォームのテキストボックスに接続先であるパスを入力し、それに応じて接続文字列を動的に変更することは可能でしょうか?

    というのも、最近になって現在作成中であるプログラムを複数で使用したいという申し出があり、ネットワークを利用し接続先のデータベースを共有化しようと考えているからです。

     

    できれば具体的なコード等もあれば幸いです。よろしくお願いします。
    2007年9月6日 5:12

回答

  • VBの場合は以下のようになるようですね。

     

    My.MySettings.Default.sekisan_kousyuConnectionString = ";Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\XXXX\\aaa.mdb";

    2007年9月7日 15:05
    モデレータ
  • ありがとうございました。

    ログインフォームを作っておいて、メインフォームに移る際に接続文字列を任意に設定することにしました。

    これにより、接続先のデータベースが移動しても対応できるようになりました。

    本当にありがとうございました。

    2007年9月10日 4:00

すべての返信

  •  みやり さんからの引用

    ここで質問なのですが、接続文字列が一定ではなく、例えばwindowsフォームのテキストボックスに接続先であるパスを入力し、それに応じて接続文字列を動的に変更することは可能でしょうか?

     

    可能です。通常はプロジェクトのプロパティの設定タブに接続文字列があるはずですから、その接続文字列を複数用意しておき、プログラムで切り替えます。
    テストボックスに指定した接続文字列を使うのであれば、それをグローバル変数で覚えておき、それを使うだけです。

     

    注意しなければならないのは、TableAdapterでストアドプロシージャを使用している場合、そのストアドプロシージャの前にデータベース名が付いていますので、異なるデータベース名に接続した場合、ストアドプロシージャが見つからない状態になってしまいます。
    この場合、ストアドプロシージャ名に修飾されているデータベース名を削除して下さい。

    2007年9月6日 7:02
    モデレータ
  • 有難うございます。

    参考にさせて頂こうと思っているのですが、あるサイトで模範となるような回答があったので、ちょっと書いてみます。

     

    <模範例>

    ソリューションエクスプローラで

    Settings.settings を 開く

    アプリケーションの選択
    XML エディタ を選択
    <Setting Name="XXXConnectionString" Type="(Connection string)" Scope="Application">

    <Setting Name="XXXConnectionString" Type="(Connection string)" Scope="User">
    に変更する。

    コード上で、
    Properties.Settings.Default.XXXConnectionString = 任意の値;

    これらのことから

    フォームを表示する前に以下のように設定。

    class main
    {
    static void Main()
    {
    Properties.Settings.Default.KokyakuDBConnectionString1 = ";Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\XXXX\\aaa.mdb";
    Application.Run(new Form1());
    }
    }

     

    これが意図するところは、アプリケーションの接続文字列に依存する点をユーザー自身の設定に依存するという変更点だと思うのですが、trapemiyaさんの方法から察するに模範例の”任意の値”部分をその都度変更するということですよね?

    そこで分からない部分があります。class main以降のコードについてなのですが、これはフォームを表示する前に設定しているとあるのですが、実際コーディングする場所はどこにしたら良いのでしょうか?基本的なことなのでしょうが、行き詰ってしまいました。

     

     

    2007年9月6日 15:07
  •  みやり さんからの引用

    これが意図するところは、アプリケーションの接続文字列に依存する点をユーザー自身の設定に依存するという変更点だと思うのですが、trapemiyaさんの方法から察するに模範例の”任意の値”部分をその都度変更するということですよね?

     

    その通りです。scopeには2種類あって、ApplicationとUserがあります。Applicationの場合はランタイム時に変更することができないため、Userに変更しています。

     みやり さんからの引用

    class main以降のコードについてなのですが、これはフォームを表示する前に設定しているとあるのですが、実際コーディングする場所はどこにしたら良いのでしょうか?基本的なことなのでしょうが、行き詰ってしまいました。

     

    実際に使う場合は、例えば、

    sqlConnection1.ConnectionString = Properties.Settings.Default.XXXConnectionString;

    のような形で接続文字列を与えますから、上の行を実行する前であればどこでもかまいません。コンストラクタ辺りで設定してしまっても良いでしょう。

    2007年9月6日 15:43
    モデレータ
  • 何度も申し訳ありません。

       Properties.Settings.Default.sekisan_kousyuConnectionString = ";Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\XXXX\\aaa.mdb";
    のように動的に変更させる場合、これってvisual basic EE でも利用できますか?というのも前述したあるサイトの質問事項が、C#前提だったからです。

    実際に書いてみたところ、案の定失敗しました。

    何か宣言等しなければならないのでしょうか?(Propertiesの部分で宣言が必要とでます)

    2007年9月7日 3:13
  • Visual StudioのEditionに関係することではないので、たぶんVisual Basic EEでも可能だと思います。

    ところで失敗した時はどのようなメッセージが出ていたのでしょうか?

    2007年9月7日 5:22
    モデレータ
  • なんとなく原因はコーディングの場所のような気がするのですが。

     

    順を追って説明します。

    1,scopeをUserに変更。

    2,接続文字列の変更設定をform1をロード時に設定。

         Properties.Settings.Default.sekisan_kousyuConnectionString = ";Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\XXXX\\aaa.mdb";
        End Sub
    3,実行までに至らない。Propertiesにエラーがかかった状態で、「宣言が必要です」と出る。

     

    ※sekisan_kousyuConnectionString の接続を利用して更新等を行うのは、tableadapterを使用しています。

     

    2の接続文字列のコーディング場所が悪いのでしょうか?

    2007年9月7日 5:51
  • VBの場合は以下のようになるようですね。

     

    My.MySettings.Default.sekisan_kousyuConnectionString = ";Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\XXXX\\aaa.mdb";

    2007年9月7日 15:05
    モデレータ
  • ありがとうございました。

    ログインフォームを作っておいて、メインフォームに移る際に接続文字列を任意に設定することにしました。

    これにより、接続先のデータベースが移動しても対応できるようになりました。

    本当にありがとうございました。

    2007年9月10日 4:00