10

どうやら、接続文字列でAttachDbFilenameuser instanceを使用することは、DBに接続するための悪い方法です。ローカルマシンでSQLServerExpressを使用していますが、すべて正常に機能しているようです。しかし、SQLサーバーに接続する適切な方法は何ですか?

説明ありがとうございます。

4

2 に答える 2

17

使用User Instanceとは、SQLServerがプログラムで使用するためにそのデータベースファイルの特別なコピーを作成していることを意味します。同じ接続文字列を使用する2つの異なるプログラムがある場合、それらはデータベースの2つのまったく異なるコピーを取得します。これは多くの混乱を招きます。人々は自分のプログラムでデータの更新をテストしてから、Management Studioでデータベースの別のコピーに接続し、更新が機能していないと不平を言うからです。これにより、間違った問題のトラブルシューティングを試みる、欠陥のある一連の野生のガチョウの追跡手順が実行されます。

この記事では、この機能の使用方法について詳しく説明しますが、最初の注意点に注意してください。このUser Instance機能は廃止されました。SQL Server 2012では、推奨される代替手段は(この順序で、IMHO)です。

  1. データベースを作成するか、SQLServerの実際のインスタンスに接続します。接続文字列は、インスタンス名、データベース名、および資格情報を指定するだけで済みます。Management Studio、Visual Studio、およびプログラムはすべてデータベースの単一のコピーに接続するため、混乱は発生しません。

  2. ローカル開発用のコンテナを使用します。これは、 AnnaHoffmanとAnthonyNocentinoによる素晴らしいスタータービデオです。ここここ、およびここに他のリソースがあります。M1 Macを使用している場合、本格的なSQL Serverインスタンスを使用することはできませんが、ほとんどのSQL Server機能を使用できる場合は、Azure SQL Edgeを使用できます(省略はここに列挙されています)。

  3. SqlLocalDbローカル開発に使用します。昨日、この記事「SQL Server 2012ExpressLocalDB入門」を紹介したと思います。

  4. SQLServerCompactを使用します。機能と構文が同じではないため、このオプションが最も好きではありません。したがって、最終的に展開する予定のすべての機能が必ずしも提供されるとは限りません。Compact Editionも非推奨になっているため、それがあります。

もちろん、バージョン<SQL Server 2012を使用している場合SqlLocalDbは、オプションではありません。したがって、実際のデータベースを作成し、それを一貫して使用する必要があります。完全を期すためのコンパクトオプションについてのみ言及します。これは、を使用するのと同じくらい悪い考えになる可能性があると思いますAttachDbFileName

編集:私はこれについてここにブログを書きました:

于 2012-06-24T15:58:27.617 に答える
-2

誰かが問題を抱えていた場合に備えて。

を含む接続文字列を使用してデータベースを接続するAttachDBFileSQLEXPRESS、この接続がデータベースを使用していたASP.NETアプリケーション専用であることに気付きました。System.Data.SqlClient接続は、プロバイダーとして作成されたときに、ファイルレベルで他のすべてのプロセスへのアクセスをブロックしました。

接続を他のプロセスと共有できるようにするには、代わりにデータベースを使用して、接続文字列でデータベース名を指定します。例または接続文字列:

Data Source=.\SQLEXPRESS;DataBase=PlaCliGen;User ID=XXX;password=ZZZ; Connect Timeout=30 

、ここで、PlaCliGenはSQLEXPRESSサーバーがデータベースを認識するための名前(または論理名)です。

AttachDBFileを使用してデータベースに接続し、.mdfファイルへのパスを指定することにより (namely : replacing DataBase = PlacliGen by AttachDBFile = c:\vs\placligen\app_data\placligen.mdf) 、ファイルは排他的に接続され、他のプロセスはデータベースに接続できませんでした。

于 2017-05-11T13:38:24.820 に答える