それぞれ C#.net Windows フォーム アプリケーションを実行している 2 台のマシンがあります。両方を、いずれかのマシンにある単一の SQL Server データベースに接続する必要があります。そして、私は両方のアプリケーションがその 1 つのデータベースで動作することを好みます。しかし残念ながら、この UNC 共有の問題が発生しています。これを解決する方法はありますか?それとも、別のアプローチを試す必要がありますか。私を助けてください。私はそれを感謝します。
1 に答える
AttachDbFileName
はひどく誤解を招く機能です。この「データベース」に接続する各アプリケーションは、データ ファイルのコピーを作成します。したがって、Machine1
接続して変更を加えた場合、それらの変更は には表示されませんMachine2
。これは、単一マシンのシナリオでも多くの混乱を引き起こします。これは、人々が Visual Studio 経由で接続し、何らかの更新を行った後、Management Studio からは表示されないためです。またはその逆。このUser Instance
機能は、何らかの理由で廃止されました。これらの両方の使用を停止してください。
複数のマシン/アプリケーションをデータベースの同じコピーに接続する必要があるため、必要なソリューションは、データベースの単一のコピーを SQL Server の単一のインスタンスに接続し、両方のアプリケーション/マシンがその単一のコピーに接続することです。 .
これMACHINE1-PC
を行うには:
ShopDatabase.mdf
およびその関連.ldf
ファイルをユーザー フォルダーからインスタンスのデータ フォルダーに移動します。これは次のようになります。C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data\
を使用して、ローカル Express インスタンスに接続します
.\SQLEXPRESS
。次のコードを使用してデータベースをアタッチします。CREATE DATABASE ShopDatabase ON (FILENAME = 'C:\...\ShopDatabase.mdf'), -------------------^^^ fill this in (FILENAME = 'C:\...\ShopDatabase_Log.ldf') -------------------^^^ fill this in FOR ATTACH; -- if there is no log file, you may need to do: CREATE DATABASE ShopDatabase ON (FILENAME = 'C:\...\ShopDatabase.mdf') -------------------^^^ fill this in FOR ATTACH_REBUILD_LOG;
の外部 IP アドレスを決定します
MACHINE1-PC
(別のマシンから ping を介してこれを行うことができます - ローカルでは、127.0.0.1
どれが役に立たないかがわかります)。固定 IP があり、DHCP を使用していないと仮定すると、これはより信頼性の高い接続方法になるか、少なくとも余分な手順 (名前の解決) がありません。ただし、DHCP を使用する場合は、IP アドレスが時間の経過とともに変化する可能性があるため、これに依存する必要はありません。接続文字列は次のようになります。Data Source=MACHINE1-PC\SQLEXPRESS; Network=DBMSSOCN; Integrated Security=True; Initial Catalog=ShopDatabase; -- or: Data Source=<<IP Address>>\SQLEXPRESS; Network=DBMSSOCN; Integrated Security=True; Initial Catalog=ShopDatabase; -- (replace <<IP Address>> of course)
Machine1
接続文字列では を使用できますが、いくつかのキーストロークを節約するよりも一貫性を保つData Source=.\SQLEXPRESS
方がよいでしょう。このようにして、構成ファイルなどに他の変更を加えた場合、マシン名を変更する必要なく、それらを他のマシンに配布できます。