2011-12-24 8 views
-1

SQL Server Management Studioでデータベースを作成しましたが、SalonDatabaseと呼びました。私はVS C#でデータベースに接続しようとしました。このために私は2つのconnectionStringを作成し、そのうちの1つのみが動作するので、理由を知りたいと思います。はSQLデータベースに接続できません

この1作品:

string connString = @"Data Source=.\SQLEXPRESS;initial catalog=SalonDatabase;Integrated Security=SSPI"; 

ただし、以下は、私は、ファイルがそのディレクトリに配置されているという事実

string connString = @"Data Source=.\SQLEXPRESS; 
           Initial Catalog=C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF;Integrated Security=SSPI"; 

のために私が取得していますエラーを知っていても動作しません。次のとおりです。

を開くことができませんデータベース "C:\ Program Files \ MicrosoftのSQLサーバ\ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA \ SALONDATABASE.MDF" REQログインによって解決される。ログインに失敗しました。ユーザー 'USER-PC \ USER'のログインに失敗しました

私は自分のコンピュータに管理者としてログインしました。また、SQL Serverのユーザーインスタンスについても読んでいますが、2番目の接続に失敗した理由はわかりません。

+0

カタログはそのコンテキスト内のファイルではありません –

+0

私もattachdbfilenameを試みましたが、同じエラーが発生しました – user990692

+1

[ユーザーインスタンスは非推奨](http://msdn.microsoft.com/en-us/library/ms143684)。 aspx) –

答えて

0

接続を変更してmdfを「添付」します。 .mdfパスにスペースがある場合は、必ず一重引用符で囲みます。

Server=.\SQLExpress; 
AttachDbFilename='C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF'; 
Database=dbname; 
Integrated Security=SSPI; 
Trusted_Connection=Yes; 
+0

だからこそ私はパスの前に@を使用しています。 – user990692

+0

いいえ、@を使用しました。文字列リテラルを使用していて、複数のレイアウトを許可しているからです。スペースがあるパスにはまだ問題があります。 –

1

データベースはSQL Server Management Studioを使用して作成されるため、AttachDBFileNameは使用しないでください。 Visual Studioの[表示]メニューの[サーバーエクスプローラー]ツールを使用して、接続文字列を取得できます。

接続を追加するサーバーエクスプローラから+データ接続+接続の追加を右クリック+ Microsoft SQL Serverデータソースの選択(変更)。

接続を追加した後、右クリックしてプロパティウィンドウを選択/開きます。

Data Source=.\sqlexpress;Initial Catalog=SalonDatabase;Integrated Security=True 
0

Initial Catalogは、サーバーに接続するときにデフォルトデータベース名を設定するために使用されます。 データベースファイルの完全なパスを渡すときに、接続文字列が実際に存在しない名前C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF のデータベースを検索するため、失敗します。 初期アプローチを使用することができます。完全パスを使用する場合は、P.Campbellの提案に従ってAttachDbFilenameを使用できます。

0

既定では、SQL Server(すべてのエディション)を使用している場合、サーバー部分はすべてのファイルあなたのための雑用。新しいデータベースを作成する(または既存のデータベースを追加する)だけで、論理的にデータベース名を与えてから、このデータベース名でデータベースを参照するだけで、そのデータベースについては気にしません(必要もありません)。データベースを構成する実際のファイル

これは、最初の接続文字列が機能する理由です。SalonDatabaseという名前のデータベースで作業することをSQL Server(Express)に伝えていて、SQL Serverはこのファイルに関係しています。

マイクロソフトでは、SQL Server Expressのユーザーインスタンスを「動的に」作成し、物理的にを添付できるというこの概念を導入しました。MDFファイル(論理名でデータベースを参照するのではなく)を開発ツールとして使用すると、作業が簡単になりますが、率直に言えば、それはむしろ面倒な概念であり、多くの欠点があります。

このシナリオでは、基本的にユーザーコンテキストのSQL Server Expressのインスタンスを別々に開始する必要があることを接続文字列(AttachDbFileName=salondatabase.mdfUser Instance=Trueを使用)でSQL Serverに伝え、自動的にその物理MDFファイルをデータベースにアクセスし、アクセスを提供します。

もう1つのコメントで述べたように、廃止予定の機能です - SQL Server 2012は、ローカルデータベースの新しい、うまくいけにわしい概念をもたらします。だから私の意見では、この機能の使用を避けるようにしてください。それは他の何よりも難しいことです。

関連する問題