2012-05-10 61 views
54

我正在尝试执行实体框架的代码优先演练(http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx)。版本11的localdb的连接字符串是什么

我有最新的SQL Server Express,当我通过命令行检查我的版本时(sqllocaldb info):我看到localdbApp1和v11.0。当我尝试通过一些小的调整来运行演练时,我得到一个无法连接的错误。

我的app.config看起来是这样的:

<parameter value="Server=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" /> 

我写了一个简单的连接测试,如下面,代码返回相同的SQL连接错误((provider:命名管道提供程序,error:40 - 无法打开到SQL Server的连接))。

new System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True").Open(); 

我试着"Server=..."但无济于事有更换"Data Source=..."

任何想法的连接字符串应该是什么?

+6

我并不是说这是问题的原因,是因为可能会有更多,但反斜杠在C#字符串中是特殊的,除非你在它们前面加上'@':'@“(LocalDB)\ v11.0”'。 – hvd

+1

是的,我没有添加@符号。我做了重试并返回了相同的结果。 –

+0

连接字符串中没有数据库。 –

回答

1

您需要按照提及的here安装Dot Net 4.0.2或以上版本。
的4.0位不明白通过的LocalDB

See this question here

所需的语法,您可以下载中心更新here

+0

我已经下载了最新的。这是我的帮助 - >关于...显示:Microsoft Visual Studio 2010版本10.0.40219.1 SP1Rel Microsoft .NET Framework版本4.0.30319 SP1Rel –

+0

我想你有最新的。就像我的一样。检查Presentation.Core.dll与版本4.0.30319.275(vs微软更新文章245) – Steve

1

这是别人谁也一直在努力像我得到这个工作... 。我浪费了半天时间更上了一个看似微不足道的事情......

如果你想使用SQL Express 2012的LocalDB从VS2010您必须安装此修补软件 http://www.microsoft.com/en-us/download/details.aspx?id=27756

就像上面评论中提到的,我也有微软的.NET Framework版本4.0.30319 SP1Rel,并且自从它提到无处不在,你需要“框架4.0.2或以上”,我认为我很好去...

然而,当我明确地下载了4.0.2补丁,并安装它,我得到它的工作....

17

我安装提到的.Net 4.0.2更新,但我得到了同样的错误消息说:

A network-related or instance-specific error occurred while establishing a connection to 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 framework 3.5编译的,但SqlLocalDb只适用于DotNet 4.0。

纠正后,问题就解决了。

90

1)需要将.NET Framework 4更新至至少4.0.2。If you have 4.0.2, then you should have

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2 

如果您已经安装了最新的VS 2012有机会,你已经有4.0.2。先验证一下。

2)接下来你需要有一个LocalDb的实例。默认情况下,您有一个实例,其名称是一个v字符,后跟LocalDB版本号,格式为xx.x.例如,v11.0代表SQL Server 2012. Automatic instances are public by default. You can also have named instances which are private。命名实例提供与其他实例的隔离,并可通过减少与其他数据库用户的资源争用来提高性能。 You can check the status of instances using the SqlLocalDb.exe utility (run it from command line).

3)接下来您的连接字符串应该是这样的:

"Server=(localdb)\\v11.0;Integrated Security=true;" 
从您的代码

"Data Source=(localdb)\\test;Integrated Security=true;" 

They both are the same.注意两个\\需要,因为\v\t表示特殊字符。另请注意,在(localdb)\\之后出现的是LocalDb实例的名称。 v11.0是默认的公共实例,test是我手动创建的私有的。

  1. 如果你有一个数据库(.mdf文件)已经:

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;" 
    
  2. 如果你没有一个SQL Server数据库:

    "Server=(localdb)\\v11.0;Integrated Security=true;" 
    

而且您可以创建自己的数据库程序化盟友:

一)将其保存在默认设置的默认位置:

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工具,它是可悲的..

编辑:移动分号的位置,否则错误会发生如果代码被复制/粘贴

+0

最佳答案我见过!我刚刚安装.Net 4.5.2,一切都完成了!和我的爱人! :)) –

+0

它似乎连接字符串是我的大小写敏感。我必须使用“Server =(LocalDb)\ v11.0;”让它起作用。 –

0

我有连接字符串Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

甚至一个.NET 3。5程序成功连接并执行SQL。

但很多人都说.NET 4.0.2或4.5是必需的。

3

在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版本。

寻找programmicaly我用这个方法,在这个post

9

解释我有同样的问题了一下。 我注意到,我有:

Data Source= (localdb)\v11.0" 

只需添加一个反斜杠它解决了我的问题:

Data Source= (localdb)\\v11.0" 
+0

yes - '“\ v”'是[垂直标签](https://msdn.microsoft.com/en-us/library/4edbef7e%28v=vs.110%29.aspx)。以某种方式转义'\'很重要。 –

6

这是一个相当古老的线程,但因为我是重新安装我的Visual Studio 2015年的社区,我想我可能会添加一些有关在VS2015上使用什么的信息,或者一般情况下可能会发挥什么作用。

要查看默认情况下安装了哪些实例,请在命令提示符下键入sqllocaldb info。在我的机器上,我得到两个实例,第一个命名为​​

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;" 
相关问题