本地数据库11版本的连接字符串是什么?

69
我正在尝试完成实体框架的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 Connection 错误信息 ((provider: Named Pipes Provider, error: 40 - Could not open a connection to 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" - user743382
1
我没有添加@符号。我尝试了重试,但结果仍然相同。 - Bill Nielsen
您的连接字符串中没有数据库。 - Gert Arnold
这可能是一个愚蠢的问题,但你确定你的应用程序编译为.NET 4.x吗?.NET 3.5应用程序会出现此错误,因为.NET 3.5不理解(localdb)服务器名称。 - Krzysztof Kozielczyk
1
请查看我在类似问题上的答案 - bogdan.rusu
2
也就是 (LocalDb)\MSSQLLocalDB - Jess
8个回答

101
要求.NET Framework 4更新至至少4.0.2版本。如果您已经安装了4.0.2版本,则应该有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v4.0.30319\SKUs.NETFramework,Version=v4.0.2。如果您已安装最新的VS 2012,则很有可能已经具有4.0.2版本。请先进行验证。
您需要先创建一个 LocalDb 实例。默认情况下,您会拥有一个实例,其名称是单个 v 字符,后跟格式为 xx.x 的 LocalDB 发行版版本号。例如,v11.0 代表 SQL Server 2012。自动实例默认为公共实例。您还可以拥有私有的命名实例。 命名实例可以隔离其他实例,并通过减少与其他数据库用户的资源争用来提高性能。您可以使用 SqlLocalDb.exe 实用程序(从命令行运行)检查实例的状态。 接下来,您的连接字符串应该如下所示:

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

或者

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

从你的代码中。 它们都是相同的。 请注意需要两个 \\,因为\v\t表示特殊字符。还要注意,(localdb)\\之后出现的内容是你的LocalDb实例的名称。v11.0是默认的公共实例,test是我手动创建的私有实例。
  1. If you have a database (.mdf file) already:

     "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. If you don't have a Sql Server database:

     "Server=(localdb)\\v11.0;Integrated Security=true;"
    
您可以通过编程方式创建自己的数据库:
a) 将其保存在默认位置并使用默认设置:
var query = "CREATE DATABASE myDbName;";

将其保存到特定位置并使用自定义设置:
// 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.exe 实用程序无法访问数据库,您还需要单独使用 sqlcmd 实用程序,这很遗憾。

我见过的最好的答案!我刚刚安装了 .Net 4.5.2,一切都完成了!我的爱与你同在!:)) - Mahmood Jenami
1
似乎连接字符串对我来说是大小写敏感的。我必须使用“Server =(LocalDb)\ v11.0;”才能使其正常工作。 - Frank Liu

20

这是一个相当旧的帖子,但由于我今天重新安装了Visual Studio 2015 Community,所以我想添加一些关于在VS2015上使用什么或可能通用的信息。

要查看默认安装了哪些实例,请在命令提示符中键入sqllocaldb info。在我的计算机上,我得到两个实例,第一个命名为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;"

1
将其粘贴到VS中的json文件中会自动为我添加反斜杠。 - Andrew

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已正确安装和运行。那么,我使用此连接字符串Server =(LocalDB)\ v11.0; Integrated Security = true;无法通过.Net代码连接到SqlLocalDB的原因是什么呢?
然后我意识到我的应用程序是为DotNet框架3.5编译的,但SqlLocalDb仅适用于DotNet 4.0。
纠正后,问题得到解决。

9

我之前也遇到过同样的问题。 我注意到我的:

Data Source= (localdb)\v11.0"

仅仅添加一个反斜杠就解决了我的问题:

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

是的 - "\v" 是一个垂直制表符。以某种方式转义\非常重要。 - Wai Ha Lee

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

如果需要编程查找,我会使用在这个帖子中解释的方法。


1

我已经下载了最新版本。这是我的“帮助”->“关于”...显示的内容:Microsoft Visual Studio 2010 版本 10.0.40219.1 SP1Rel Microsoft .NET Framework 版本 4.0.30319 SP1Rel。 - Bill Nielsen
我猜你也有最新的版本。就像我的一样。Presentation.Core.dll 版本为 4.0.30319.275(与 Microsoft 更新文章中的版本 245 相比)。 - Steve

1

这是为那些像我一样在解决问题时遇到困难的人准备的...我浪费了半天时间在一个看似微不足道的事情上...

如果你想从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或以上",所以我认为我可以开始了...

然而,当我明确地下载了4.0.2补丁并安装它后,它就可以工作了...


0

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

而且,即使是一个.NET 3.5程序也可以成功连接并执行SQL。

但是很多人说需要.NET 4.0.2或4.5。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接