• 締切済み

VB2005のデータソースの切り替えについて

VB2005を使用して社内の業務ソフトウェアの開発をしています。 本番環境ではデータベースソフトとしてSQL Server 2005を使用する予定になっているのですが、開発環境ではAccessのmdbファイルを使用したいと考えています。 この場合、Accessのファイルをデータソースとして開発したプロジェクトに含まれる、app.configの <connectionStrings> <add name="テストDB.My.MySettings.テストDBConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\テストDB.mdb" providerName="System.Data.OleDb" /> </connectionStrings> の部分を、 <connectionStrings> <add name="テストDB.My.MySettings.テストDBConnectionString" connectionString="Data Source=[サーバー名];Initial Catalog=テストDB;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> と書き換えても、うまく動作しません。 データベースに接続するのがOleDbConnectionになっているため、データソースをSQL Serverに変えても動かないのはわかるのですが、開発時にAccessを使用して、本番環境ではSQL Serverを使用する、といった切り替えを簡単にできる方法というのはあるのでしょうか? SQL Server同士であればapp.configの接続文字列を変えるだけで簡単に変更することができたのですが...

みんなの回答

回答No.2

SQLサーバ以外のデータベースも使用する可能性があるなら、 OleDBの方で作成しなければなりません。 もちろん、OleDBで作るとSQLサーバに接続した場合にはSqlDBより遅いみたいですが仕方がありません そのかわり、Access,SQLサーバ,オラクル等、色々なデータベースと接続できます。

Rubellite
質問者

補足

>OleDBの方で作成しなければなりません。 >そのかわり、Access,SQLサーバ,オラクル等、色々なデータベースと接続できます。 SQL Serverを使用するときは、SqlClient.SqlConnectionを使用しないとダメだと認識していたのですが、OleDBConnectionでもSQL Serverに接続できるのでしょうか? 接続できるとしたら、是非こちらのやり方を研究してみたいと思います。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

AccessDataSourceでは無くSqlDataSourceの派生クラスでMDBを指定すれば良いのではないでしょうか データソースを追加する際に『データベース』を選択 『新しい接続』ボタンをクリック 『接続の追加』ダイアログで「変更」ボタンをクリック データーソースの種類を『Microsoft Access データベースファイル』に変更してMDBファイルを指示してやれば良いように思います

Rubellite
質問者

補足

ご回答ありがとうございます。 新しいデータソースを追加し、「新しい接続」を選びますよね。その後、データソースの種類を「Microsoft Access データベースファイル」を選択すると、Accessのファイルをデータソースとしたデータセットが作成されるのはわかります。 この場合、Accessを使用して作成したデータソースは、接続文字列がSQL Serverを使用して作成したものと違う名前を付けなくてはいけませんよね? また、その次に出てくるデータセット名もSQL Serverを使用したものと違うものを使用しなくてはいけません。 新しいデータソースを追加したのだから、当然接続文字列やデータセット名を違うものにしなきゃいけないのも納得がいきます。 問題は、データセット名が異なると、Accessに切り替えしようとすると、SQL Serverを使用したデータセット名を使って開発した部分を、Accessで作成したデータセット名に書き換えないと動作しないと思うのですが... そうなってくると、各フォームに張り付いているコントロールのデータ連結を全部やり直さないといけなくなるので、SQL Server同士の「app.configの接続文字列を変える」といった簡単な方法での切り替えは出来ないように思いますがいかがでしょうか?

関連するQ&A

  • VB.NET ORA-12170

    http://okwave.jp/qa/q8420174.html ↑ VB.NETで作成したアプリでこちらの質問で無事解決し、違う環境で試したところORA-12170の タイムアウトエラーが発生しました。 SQL*Plusからの接続は問題ありません。 わからないのはWEBアプリの方は接続できるのに、コンソールアプリの方がこのエラーになってしまいます。 どちらのアプリの接続文字列も同じData Sourceを指定してます。 「db1」がTNSNAMES.ORAに記述している識別子になります。 WEBアプリ側 (Web.configに記述) <connectionStrings> <add name="oracle" connectionString="Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1" providerName="System.Data.OleDb" /> </connectionStrings> コンソールアプリ側 (INIファイルに記述) ConnectionString=Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1 一般的にはDBサーバにネットワークがつながってないなど単純な理由のようですが、 WEBアプリは接続できるので、そういうことはあり得ないと思います。 コンソールアプリの問題と思うのですが、どんな原因が考えられるでしょうか?

  • 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♯に慣れていないため、全般、作りについてアドバイス いただけたらと思います。 よろしくお願いします。

  • ORACLEデータをACCESSへインポート VB

    OracleのデータをAccessへインポートする方法について、どなたかご教授ください。 VB.NETで OracleからAccessへのデータコンバート機能を作ることになりました。 (環境 OS;Win7 言語;VB2008 Oracle;10g Access;2010) 対象のテーブル数、フィールド数、データ数がかなり多いのですが、Accessへデータをインポート(コピー)する良い方法はないでしょうか? 普段、データ入力が専門のためプログラムは初心者です。 今のところOLE DBを使用して1行ずつデータを登録する方法しかできません・・・ ヘルプを参考に、ODBCでDSNレスのINTO(SQL)を挑戦しているのですが「入力テーブルまたはクエリが見つかりません」と出てしまいます。 ◇質問 (1).複数のテーブルをAccessへコピーするにはどんな方法がありますか?   また、このような対象テーブルが多い場合に有効な方法は? (2).ODBCでDSNレスのINTO(SQL)を作成するのに注意することはありますか? ちなみにエラーが出てしまうSQL文は以下です。違っているでしょうか? cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;data source=D:\DATA\DB.mdb" sql = "SELECT * INTO impテーブル名 " & _ "FROM [ODBC;DRIVER={Microsoft ODBC for Oracle};" & _ "SERVER=" & orSorc & ";" & _ "UID=" & orUsrID & ";" & _ "PWD=" & orPswd & "].expテーブル名" ※ Oracleは10g/11gのバージョンが存在するためODPは使用しません

  • VBのデータグリッドの表示が消えてしまいました。何故でしょうか?

      cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" cn.Open mySQL= "SELECT * FROM 2学年 " _ & "WHERE (((所属)='" & frmPW.cmb生徒.Text & "'))" Set rs= New ADODB.Recordset rs.Open mySQL, cn, adOpenStatic Set DataGrid1.DataSource = rs と記述していて、それまでデータグリッドにデータが上手く表示されていたのに、 接続先のmdbファイルにパスワードを設定して、ConnectionStringの設定部分を   cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\生徒管理\生徒.mdb;" & _ "Jet OLEDB:Database Password=seito2;" に変更したところ、データグリッドにデータが表示されなくなりました。 データベースへの接続は上手くいっているようなのですが、何故データグリッドに データが表示されなくなったのでしょうか。 よろしくお願いします。

  • VB.NET Oracle接続 32、64bit

    VB.NET 2010でOracle11gに接続するプログラムを作っていますが、 接続方法がいまいちわからずに困っています。 プログラムを動かすサーバーはWindows Server 2008 R2の64bitだったので、 Oracle Clientも合わせた方がいいのかなと思い、64bit版をインストールしました。 ASP.NETのWEBアプリでは以下の接続文字列を用いてADO接続できました。 パラメータ値は例です。 (Web.configに記述) <connectionStrings> <add name="oracle" connectionString="Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1" providerName="System.Data.OleDb" /> </connectionStrings> 次に、コンソールプログラムを作成し、同じサーバーで上記と同様の接続文字列で 接続しようとしましたが、エラーとなり接続できませんでした。 いろいろ記述を変えても接続できませんでしたが、最終的にOracle Clientの 32bit版を64bit版と違うフォルダにインストールし、以下の接続文字列で接続 できました。(INIファイルに記載) ConnectionString=Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1 この状態でWEBアプリの方は何を使っているのかと思い、64bit版のインストールフォルダを リネームしたところ、WEBアプリの方は接続できなくなりました。 現状では32bitと64bitのOracle Clientが両方必要な状況ですが、本来ならどちらかだけで すむと思います。 32bitと64bitで接続文字列が変わるという情報は得られませんでした。 何がまずいのでしょうか? 最初から32bit版をインストールすれば良かったのでしょうか。

  • VWD エラー 「ユーザー 'NT AUTHORITY\NETWORK SERVICE' はログインできませんでした。」

    Vista, VWD2008 express edition, SQL Server 2008を使っています。 SQL Server 2008をインストール時に色々失敗し、DBのインスタンスはSQLEXPRESS3という名前になっています。web.configに <remove name="LocalSqlServer"/><add name="LocalSqlServer" connectionString="data source=(CP名)\SQLEXPRESS3;user id=sa;password=;Integrated Security=SSPI;Initial Catalog=aspnetdb" providerName="System.Data.SqlClient"/> として、DB接続しているのですが、タイトルのエラーがでます。 「NT AUTHORITY」に接続権限を与えても同じでした。どうしたらログインできる様になるか教えて頂けませんでしょうか。

  • エクセル側からアクセスへデータ転送

    エクセル側からアクセスにデータ転送する時に Sub Data_Add() Dim db As New ADODB.Connection Dim Rs As New ADODB.Recordset db.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\Owner\Desktop\1.mdb;" アクセス2003にデータを転送する場合はこれでうまくいきましたが、 アクセス2007にデータを転送しようと、 \1.accdb;"とすると、データベースの形式を認識できません。となってしまいます。 どうしたらいいでしょうか? だれか教えて頂けませんか?

  • 入力フォームからエクセルデータをアクセスにインポートしたい

    入力フォームからエクセルデータをアクセスにインポートしたいと考えています。 入力フォームに、参照ボタンをつけて対象となるエクセルファイルを指定することはできましたが、その後、そのデータをアクセスのテーブルにインポートしたいと考えています。可能でしょうか。 宜しくお願い致します。 *********入力フォーム***************** <form method="POST" action="test.asp"> <input type="file" name="excel"> <input type="submit" value="送信"> </form> *********test.asp***************************************** *******ACCESSに接続まではできるが、エクセルのデータを testテーブルにインポートする方法がわからない。 また、インポートする前にtestテーブルのデータを 全て削除したいと考えています。****** Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open

  • Access起動中にエクセルからADOでデータの更新ができない

    こんばんは。原因がわからないので質問させてください。 SQLサーバーのデータをAccessのmdbへリンクテーブルしています。 (SQLサーバー → Access) 全て一つのパソコンで行なっています。(LANには接続していません) Accessのmdbファイルを起動している時に ExcelからSQLサーバーのAccessにリンクしている上記のテーブルへ ADOを使ってデータを追加しています。 (Excel → Access)  しかし、「rs.Update」の部分で  「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」 となってしまいます。 なので、一度mdbファイルを落として、コードを再開すると通るので ADOでExcel → Accessにデータを追加し終わってから再度mdbファイルを立ち上げています。 また同じ状態(mdbファイルを起動)で Excel → SQLサーバー へ更新クエリをしようとすると「時間切れになりました」となります。 (こちらもmdbファイルを落とすと再開できます。) いちいちmdbファイルを落とすのめんどうなのですが 回避する方法はありますか? cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\Documents.test.mdb" rs.Open "テーブル", cn, adOpenStatic, adLockPessimistic rs("フィールド") = True rs.Update '保存 rs.Close: Set rs = Nothing というコードを書いています。 Accessを落とせば正常に動きます。 ご教授よろしくお願い致します。

  • データリーダーからのデータ読み出し方法(VB)

    お世話になってます。 先日データコネクションを質問しその後うまくいっているように見えたのですが、表記でまた躓いています。 コードは Dim cn As New OleDb.OleDbConnection Dim cmd As New OleDb.OleDbCommand Dim dr As OleDb.OleDbDataReader 'コマンドのコネクション設定 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB\Report.mdb" 'コネクションを開く cn.Open() 'コマンドの定義 cmd.CommandText = "SELECT password FROM T_Staff WHERE Staff_ID = '" & txtUserID.Text & "'" 'データリーダーからのデータの読み出し dr = cmd.ExecuteReader() ************************************************** 最後の行で ExecuteReader: Connection プロパティは初期化されていません。 と言うエラーメッセージが出ます。 少し検索してみましたがよくわかりません。 これって結局接続できていないのでしょうか? 初期化されていなというのはどういう状態のことなんでしょう? よろしくお願いいたします。

専門家に質問してみよう