66

エンティティ フレームワークのコード ファースト ウォークスルーを実行しようとしています ( 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=..."が、役に立ちませんでした。

接続文字列がどうあるべきか考えていますか?

4

8 に答える 8

100
  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 をインストールしている可能性があります。最初に確認するだけです。

  1. 次に、 のインスタンスが必要ですLocalDb。デフォルトでは、名前が 1v文字の後に LocalDB のリリース バージョン番号が xx.x の形式で続くインスタンスがあります。たとえば、v11.0SQL Server 2012 を表します。自動インスタンスは既定でパブリックです。private である名前付きインスタンスを持つこともできます。名前付きインスタンスは他のインスタンスからの分離を提供し、他のデータベース ユーザーとのリソースの競合を減らすことでパフォーマンスを向上させることができます。ユーティリティを使用してインスタンスのステータスを確認できSqlLocalDb.exeます (コマンド ラインから実行します)。

  2. 次に、接続文字列は次のようになります。

    "Server=(localdb)\v11.0;統合セキュリティ=true;" また

    "データ ソース = (localdb)\test;統合セキュリティ = true;"

あなたのコードからどちらも同じです。とは特殊文字を意味する\\ため、2 つが必要であることに注意してください。また、後に表示されるのは、LocalDb インスタンスの名前であることに注意してください。はデフォルトのパブリック インスタンスであり、私が手動で作成したプライベートなものです。\v\t(localdb)\\v11.0test

  1. データベース (.mdf ファイル) が既にある場合:

     "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. 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', 'admin@sqlfiddle.com'),
   ('Twitter', '@sqlfiddle');";

SqlLocalDb.exeutility はデータベースへのアクセスを提供しないことに注意してくださいsqlcmd。悲しいことに、別途 utility が必要です..

于 2013-02-22T19:12:52.160 に答える
19

上記の .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 でしか機能しません。

これを修正した後、問題は解決しました。

于 2012-09-05T18:18:21.827 に答える
1

ここに記載されているように、DotNet4.0.2以降をインストールする必要があります。
4.0ビットはLocalDBに必要な構文を理解していません

ここでこの質問を参照してください

ここでアップデートをダウンロードできます

于 2012-05-10T18:56:38.907 に答える
1

これは、私のようにこれを機能させるのに苦労したであろう他の人のためのものです....私は一見些細なことに半日以上を無駄にしました...

VS2010 から SQL Express 2012 LocalDB を使用する場合は、このパッチをインストールする必要があり ます http://www.microsoft.com/en-us/download/details.aspx?id=27756

上記のコメントで述べたように、私も Microsoft .NET Framework バージョン 4.0.30319 SP1Rel を持っていました。「Framework 4.0.2 以上」が必要であるとどこでも言及されているので、私は大丈夫だと思いました...

ただし、その 4.0.2 パッチを明示的にダウンロードしてインストールすると、動作するようになりました....

于 2012-06-19T06:36:54.240 に答える
0

接続文字列がありますServer=(localdb)\v11.0;Integrated Security=true;Database=DB1;

.NET 3.5プログラムでさえ、接続して SQL を正常に実行します。

しかし、多くの人は、.NET 4.0.2 または 4.5 が必要だと言います。

于 2013-02-24T10:56:43.573 に答える