2012-01-18 11 views
2

データベースアクセスのためにLINQ to SQLを使用するC#.NETアプリケーションを作成しています。残念ながら、過去4時間をホームネットワークで動作させるためにアプリケーションを使用しようとしました。私は開発のために前もって問題のないアプリケーションを持ってきて、変更を仕事に戻しました。しかし、今晩はデータベースアクセスに関する問題が引き続き発生し、DAOの接続文字列が自分の仕事ComputerName/Instanceを参照していることがわかりました。自分の仕事のPC名(つまりBEN-Laptop)のソリューション全体を検索し、Windowsの高度な検索オプションを使用してディレクトリ全体を検索しました。しかし、私は私の仕事のPCへの参照を見つけることができませんでした。アプリケーションを家に持ってきて、私の仕事用PCから私の家のPCにすべての接続文字列の値を変更しました。なぜDAOの接続文字列が私の仕事用PCとSQLインスタンスを参照しているのか分かりません。私は迷っているので、この情報はどこかにキャッシュされていますか?LINQ to SQL DataContextがConnectionStringを更新しない

+0

具体的には、私が変更した接続プロパティは、主にapp.configおよびdbmlファイルにありました。仕事用PC(Ben-LaptopからMajor-HomePC)への参照を変更するために可能なすべての検索メカニズムを使用しているときに、自分のアプリケーションが自分の仕事用PC上のデータベースを見つけようとしている理由を理解できないだけです。私が考えることができるのは、この情報がプロジェクトの外のどこかにキャッシュされているということですが、私は.NET開発にかなり新しく、自分の努力を尽くしたように感じます。ご提案をお願いします。私はそれを感謝します。 – Grasshopper

+0

プロジェクトをクリーンにして、Rebuildを実行してください。第2に、接続文字列は 'app.config'からのみ読み込まれます。あなたは' dbml'ファイルでどこでそれを見つけましたか教えてください。 app.configの変更は、アプリケーションの再起動時にのみ反映されます。アプリケーションのwinform、コンソール、またはウィンドウサービスのタイプは何ですか? –

答えて

2

デザインビューでdbmlファイルを開いてプロパティ(F4)を表示すると、ConnectionStringプロパティが見つかるはずです。使用可能な接続文字列のリストを展開すると、各文字列のソースがわかります。設定ファイルから来る可能性が最も高いです。 (〜\ Properties \ Settings.settings)

データコンテキストを作成するときは、接続文字列を取るコンストラクタを使用するのが理想的です。

using(var dc = new TestDataContext(connectionString)) 
{ 
    // Do stuff 
} 
1

DataContextのデータベース接続文字列の問題は、実際にはソリューションを再構成した私の同僚の結果でした。つまり、Windowsアプリケーションは1つのプロジェクトにあり、データベースロジックは別のプロジェクトでDLLとしてコンパイルされます。 Windowsアプリケーションは、明らかに接続文字列のために自分の仕事の設定を持っていた古いバージョンのDLLを参照していました。プロジェクトの参照を正しいDLLに変更するだけで、すべて正常に動作しました。これは、なぜ私は設定がDLLファイルにコンパイルされていると推測しているので、ソリューション内で私の仕事用PCへの参照が見つからない理由を説明します。私のデータベースDLLプロジェクトをデバッグしようとすると、この発見につながりました。ベースのDAOクラスとリポジトリクラスにいくつかのブレークポイントを設定し、IDEがブレークポイントをバイパスしていることを確認したら、参照を確認するように促しました。

+0

今、上記のように接続文字列をコンストラクタに渡しています。 – Grasshopper

+0

将来参照するには、プロジェクトの.dll出力を参照するのではなく、プロジェクト参照を使用するようにしてください。 –

1

最初:ちょうどこの

string pp = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf;Integrated Security=True;Connect Timeout=30"; 

秒のようになります。新しい接続文字列を言及:

DataClasses1DataContext dc = new DataClasses1DataContext(pp); 

第三: は、テーブルclasss

のインスタンスで変更を行います第4:

+0

あなたが質問を理解していないことが明らかな別の答え –

1

DataContext()コンストラクタには、実際のデータベースのパスを示す文字列がありません。

+0

はいそれは仲間になった –

関連する問題