2009-05-22 13 views
3

ネット2.0/Visual Studio 2005の/ ASP.Net Webアプリケーション指導に必要なASP.Netアプリケーションの接続文字列

私はこのサイトで多くの記事やコメントを読んでますがどちらかのいくつかは、私や他の人ドンをするために従うことがあまりにも混乱しています」私の要求を満たす。

私は3層アプリケーション(UI、BLL、DAL)を持っています。 DALでは、サーバーエクスプローラからドラッグストアドプロシージャを使用してDataSetを作成しました。そのため、接続文字列はデータセットファイルにハードコードされています。

私はUI(メインプロジェクト)の設定文字列をBLLに渡してからDALに渡すときに、簡単にステップバイステップで説明する必要があります。

答えて

0

私たちのやり方は、web.configファイルに接続文字列を含めることです(app.configも同様に動作します)。例:

using (var connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"])) { 
    using (var command = new SqlDataAdapter("MyStoredProc", connection)) { 
     command.SelectCommand.CommandType = CommandType.StoredProcedure; 
     var categories = new DataSet(); 
     command.Fill(categories); 
     return categories; 
    } 
} 

あなたは.configファイルから "どのような" で指定された値を引っ張ってConfigurationManager.AppSettings [ "どのように"]使用することができます。

<add key="ConnectionString" value="Data Source=localhost;Initial Catalog=MyDatabase;User ID=username;Password=abc123"/> 

はその後、DALに私たちはのようなものを使用ファイル。非常に便利で、開発環境、テスト環境、運用環境を切り替えるのに便利です。

1

可能であれば、ドラッグアンドドロップコーディングを避けます。あなたが魔法であまりにも多くをプレイすると、あなたは燃えてしまいます。

接続文字列は、アプリケーションの1か所にのみ配置してください。すべての層が接続文字列に関係する場合、それは問題です。 DALは接続文字列に関係する唯一の層である必要があります。

DALに接続文字列を取得させるには、IoC(Inversion of Control)が便利です。そのため、すべてのコンストラクタで接続文字列を渡す必要はありません。

データセットの日付は多少あります。新しいアプリケーションを作成する場合は、NHibernateやLinqなどのORMを使用することを検討してください。

+0

ドラッグドロップはすばやい方法です。異なるデータテーブル内の列を簡単に視覚化することができ、対応するデータ検索/挿入/更新機能をテーブルに表示すると、そのコードをすべて記述したくありませんDataSetのアダプタ。 解決策はありません。 –

+0

はい、ドラッグアンドドロップインターフェイスがあなたのために入力しているコードを理解していなければ、あなた自身は立ち往生します。あなたのように。 - – Sekhat

1

spをドラッグすると、デザイナーがtableAdapterを作成すると思います。アダプターがデータテーブルを埋めるために使用するように設定できるアダプターにはConnectionプロパティーがあります。私はあなたが設定ファイルや設定を保存している他の場所にその接続情報が必要だと他の人に同意します。私はデザイナーへのドラッグ・アンド・ドロップのファンでもありませんが、これはデータベース接続を管理するために機能するはずです。

+0

はい、あなたが正しいしている私のような私のDALのテーブルアダプタを使用しています: パブリッククラスDALCustomer { 公共のDataTable getLookupDT(文字列strLookupCatgy) { のDataTable dtを= NULL; switch(strLookupCatgy) { case "Representative": dt = new taSalesRep()。GetData();ブレーク; case "Branch": dt = new taBranch()。GetData();ブレーク; } return dt; } } テーブルアダプターの接続プロパティを設定することはできますが、ちょっと面倒です。他のオプションはありますか? –

+0

私はdatatablesの大きなファンではありません...あなたは手動でアダプタを使わずにテーブルを埋めることができます。 – CSharpAtl

+0

テーブルアダプタのプロパティウィンドウを見ると、Connectionプロパティが表示されます。そのプロパティは、接続情報がどこにあるか、私はそれがデフォルトで設定ファイルを引き出していると推測しています。 – CSharpAtl

0

web.configの特別なセクションにconnectionStringsという名前を付けることができます。あなたのC#コードで次に

<connectionStrings> 
    <add name="oracle" connectionString="Data Source=server; User ID=user; Password=password;"/> 
    </connectionStrings> 

:あなたは、web.configファイルに追加

string connString = ConfigurationManager.ConnectionStrings["oracle"].ConnectionString; 

私はそれが最初の例よりもう少し複雑だけど、それは特別に、組織化設定ファイルを保持するのに役立ちますこのファイルはますます複雑になり、このconnectionStringsセクションを評価することを学びます。

幸運を祈る!

リカルド。

0

最後に、私の質問は:実行時にDALプロジェクト設定デザイナで設定されている接続文字列をオーバーライドする方法はありますか?また、DALのデータセットでは、テーブルアダプタにこの接続文字列を使用できます。

メインプロジェクトの設定に同じ名前(DLLと同じ)のプロパティがある場合、そのサブプロジェクト(DLL)はそのプロパティの値を上書きしますそれ自身の設定でそれのために設定された値。

これはどのように行うのですか?

1

これは非常に興味深いシナリオです。私は多階層アプリケーションでデータセットを使用しているので、これまでにこれまで説明しました。だからここに解決策があります。

私は、BLL、DALのすべてのクラスライブラリプロジェクトです。 DALでは、DALクラスライブラリprjのapp.configの下に接続文字列を挿入するデータセットデザイナがあります。今度は、クラスライブラリprjであるDALの上にあるBALを参照する必要がある場合は、DALのapp.configからconnectionStringsセクションをコピーし、BAL classlib prjのapp.ConfigのconnectionStringsセクションに貼り付けます。ここでは、接続文字列名が 'myDataBaseConnStr'ではないことに気づく必要があります。それは、MyApp.DataLayer.DataSet.myDataBaseConnStrのような詳細な名前空間参照を持つことになります。 UIレイヤapp.configまたはweb.configで実行する必要がある同じプロセス。これを成功させると、UIレイヤーのapp [web.configまたはapp.config]のルート設定ファイルのconnectionStringで変更できます。これにより、実行時にAppDomainが実行されるため、常にUIレイヤーからconnectionStringが取得されます。したがって、そこにある接続文字列を変更して、それが基礎となるBALとDALに反映させることができます。

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

+0

あなたは非常に良い解決策を提供します。私は..同じ問題を抱えています。カスタムクラスを追加してweb.configから接続文字列を取得してから、tableadapterを使用すると手動で接続を開きます –