エンティティフレームワークのCode First Walkthroughを実行しようとしています( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first -walkthrough.aspx )。
最新のSQL Server Expressがあり、コマンドライン(sqllocaldb info)で使用可能なバージョンを確認すると、localdbApp1およびv11.0が表示されます。いくつかのマイナーな調整でウォークスルーを実行しようとすると、接続できませんというエラーが表示されます。
私のapp.configは次のようになります。
<parameter value="Server=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
以下のような簡単な接続テストを作成し、コードは同じSQL接続エラーを返します((プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした))。
new System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True").Open();
"Data Source=..."
を"Server=..."
に置き換えようとしましたが、そこでは役に立ちませんでした。
接続文字列がどうあるべきか考えていますか?
1)少なくとも4.0.2に更新された.NET framework 4が必要です。 4.0.2をお持ちの場合は、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2
最新のVS 2012をインストールしている場合、4.0.2が既にある可能性があります。最初に確認してください。
2)次に、LocalDb
のインスタンスが必要です。デフォルトでは、名前が単一のv
文字で、その後にxx.x形式のLocalDBリリースバージョン番号が続くインスタンスがあります。たとえば、v11.0
はSQL Server 2012を表します。 自動インスタンスはデフォルトでパブリックです。プライベートな名前付きインスタンスを持つこともできます 。名前付きインスタンスは、他のインスタンスからの分離を提供し、他のデータベースユーザーとのリソース競合を減らすことでパフォーマンスを改善できます。 SqlLocalDb.exe
ユーティリティを使用してインスタンスのステータスを確認できます(コマンドラインから実行します)。
3)次に、接続文字列は次のようになります。
"Server=(localdb)\\v11.0;Integrated Security=true;"
または
"Data Source=(localdb)\\test;Integrated Security=true;"
コードから。 両者は同じです。\\
と\v
は特殊文字を意味するため、2つの\t
が必要であることに注意してください。また、(localdb)\\
の後に表示されるのは、LocalDbインスタンスの名前です。 v11.0
はデフォルトのパブリックインスタンスです。test
はプライベートに手動で作成したものです。
データベース(.mdfファイル)が既にある場合:
"Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
SQL Serverデータベースがない場合:
"Server=(localdb)\\v11.0;Integrated Security=true;"
また、プログラムで独自のデータベースを作成できます。
a)デフォルト設定でデフォルトの場所に保存するには:
var query = "CREATE DATABASE myDbName;";
b)独自のカスタム設定で特定の場所に保存するには:
// your db name
string dbName = "myDbName";
// path to your db files:
// ensure that the directory exists and you have read write permission.
string[] files = { Path.Combine(Application.StartupPath, dbName + ".mdf"),
Path.Combine(Application.StartupPath, dbName + ".ldf") };
// db creation query:
// note that the data file and log file have different logical names
var query = "CREATE DATABASE " + dbName +
" ON PRIMARY" +
" (NAME = " + dbName + "_data," +
" FILENAME = '" + files[0] + "'," +
" SIZE = 3MB," +
" MAXSIZE = 10MB," +
" FILEGROWTH = 10%)" +
" LOG ON" +
" (NAME = " + dbName + "_log," +
" FILENAME = '" + files[1] + "'," +
" SIZE = 1MB," +
" MAXSIZE = 5MB," +
" FILEGROWTH = 10%)" +
";";
そして実行!
サンプルテーブルは、次のような方法でデータベースにロードできます。
@"CREATE TABLE supportContacts
(
id int identity primary key,
type varchar(20),
details varchar(30)
);
INSERT INTO supportContacts
(type, details)
VALUES
('Email', '[email protected]'),
('Twitter', '@sqlfiddle');";
SqlLocalDb.exe
ユーティリティはデータベースへのアクセスを許可しないことに注意してください。 sqlcmd
ユーティリティは別途必要です。
編集:セミコロンの位置を移動します。そうしないと、コードがコピー/貼り付けされた場合にエラーが発生します。
上記の.Net 4.0.2アップデートをインストールしましたが、同じエラーメッセージが表示されました。
SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました
次のようにコンソールでSqlLocalDbを確認しました。
C:\>sqllocaldb create "Test"
LocalDB instance "Test" created with version 11.0.
C:\>sqllocaldb start "Test"
LocalDB instance "Test" started.
C:\>sqllocaldb info "Test"
Name: Test
Version: 11.0.2100.60
Shared name:
Owner: PC\TESTUSER
Auto-create: No
State: Running
Last start time: 05.09.2012 21:14:14
Instance pipe name: np:\\.\pipe\LOCALDB#B8A5271F\tsql\query
これは、SqlLocalDbがインストールされ、正しく実行されていることを意味します。だから、この接続文字列で.Netコードを介してSqlLocalDBに接続できなかった理由は何でした:Server=(LocalDB)\v11.0;Integrated Security=true;
?
その後、私のアプリケーションはDotNetフレームワーク3.5用にコンパイルされましたが、SqlLocalDbはDotNet 4.0でしか動作しないことに気付きました。
これを修正した後、問題は解決しました。
これはかなり古いスレッドですが、今日Visual Studio 2015コミュニティを再インストールしていたので、VS2015で使用するもの、または一般的に機能するものに関する情報を追加するかもしれないと考えました。
デフォルトでインストールされたインスタンスを確認するには、コマンドプロンプト内でsqllocaldb info
と入力します。私のマシンでは、2つのインスタンスを取得します。最初のインスタンスはMSSQLLocalDB
という名前です。
C:\>sqllocaldb info
MSSQLLocalDB
ProjectsV13
必要に応じて、sqllocaldb create "some_instance_name"
を使用して新しいインスタンスを作成することもできますが、デフォルトのインスタンスは正常に機能します。
// if not using a verbatim string literal, don't forget to escape backslashes
@"Server=(localdb)\MSSQLLocalDB;Integrated Security=true;"
私は少しの間同じ問題を抱えていました。私が持っていることに気づいた:
Data Source= (localdb)\v11.0"
バックスラッシュを1つ追加するだけで、問題が解決しました。
Data Source= (localdb)\\v11.0"
Sql Server 2008 R2データベースファイルで接続できます
Server=np:\\.\pipe\YourInstance\tsql\query;InitialCatalog=yourDataBase;Trusted_Connection=True;
ただし、SQL Server 2012ではこれを使用できます。
Server =(localdb)\ v11.0; Integrated Security = true; Database = DB1;
.mdf
.ldf
バージョンに依存していました。
プログラムを見つけるために、私はこれで説明したこのメソッドを使用します post
これは、私のようにこれを機能させるのに苦労していた人のためのものです。
VS2010からSQL Express 2012 LocalDBを使用する場合は、このパッチをインストールする必要があります http://www.Microsoft.com/en-us/download/details.aspx?id=27756
上記のコメントで述べたように、私もMicrosoft .NET Framework Version 4.0.30319 SP1Relを持っていて、「Framework 4.0.2 or above」が必要だとどこでも述べていたので、私は行くのがいいと思いました...
ただし、その4.0.2パッチを明示的にダウンロードしてインストールすると、動作するようになりました。..
接続文字列Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;
があります
さらに、。NET 3.5プログラムが接続し、SQLを正常に実行します。
しかし、多くの人々は、.NET 4.0.2または4.5が必要であると言います。