版本 11 的 localdb 的连接字符串是啥

Posted

技术标签:

【中文标题】版本 11 的 localdb 的连接字符串是啥【英文标题】:What is the connection string for localdb for version 11版本 11 的 localdb 的连接字符串是什么 【发布时间】:2012-05-19 09:44:02 【问题描述】:

我正在尝试执行实体框架的 Code First 演练 (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=...",但无济于事。

知道连接字符串应该是什么吗?

【问题讨论】:

我并不是说这是问题的原因,因为可能还有更多,但是反斜杠在 C# 字符串中是特殊的,除非您在它们前面加上 @:@"(LocalDB)\v11.0"。跨度> 是的,我没有添加@符号。我确实重试并返回了相同的结果。 您的连接字符串中没有数据库。 查看我的How to Answer[1] 类似的问题。 [1]:***.com/a/27459473/3506427 还有(LocalDb)\MSSQLLocalDB 【参考方案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。只需先验证即可。

    接下来你需要有一个LocalDb 的实例。默认情况下,您有一个实例,其名称是单个 v 字符,后跟格式为 xx.x 的 LocalDB 版本号。例如,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).

    接下来你的连接字符串应该是这样的:

    "服务器=(localdb)\v11.0;集成安全=true;" 或

    "数据源=(localdb)\test;Integrated Security=true;"

来自您的代码。 They both are the same. 注意两个 \\ 是必需的,因为 \v\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', 'admin@sqlfiddle.com'),
   ('Twitter', '@sqlfiddle');";

请注意,SqlLocalDb.exe 实用程序不能让您访问数据库,您需要单独使用 sqlcmd 实用程序,这很可悲..

【讨论】:

我见过的最佳答案!我刚刚安装了.Net 4.5.2,一切都完成了!和我的爱人! :)) 似乎连接字符串对我来说是区分大小写的。我必须使用“Server=(LocalDb)\v11.0;”让它工作。【参考方案2】:

这是一个相当老的帖子,但由于我今天重新安装了我的 Visual Studio 2015 社区,我想我可能会添加一些关于在 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;"

【讨论】:

【参考方案3】:

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

Data Source= (localdb)\v11.0"

只需添加一个反斜杠,它就为我解决了这个问题:

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

【讨论】:

是的 - "\v" 是 vertical tab。以某种方式转义 `` 很重要。【参考方案4】:

在您可以连接的 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中解释的这个方法

【讨论】:

【参考方案5】:

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

甚至一个 .NET 3.5 程序都能成功连接并执行 SQL。

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

【讨论】:

【参考方案6】:

我安装了提到的 .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。

改正后,问题就解决了。

【讨论】:

【参考方案7】:

这是为那些像我一样努力工作的人准备的……我在一件看似微不足道的事情上浪费了半天多……

如果你想从 VS2010 使用 SQL Express 2012 LocalDB 你必须安装这个补丁 http://www.microsoft.com/en-us/download/details.aspx?id=27756

就像上面 cmets 中提到的那样,我也有 Microsoft .NET Framework 版本 4.0.30319 SP1Rel,因为它到处都提到你需要“框架 4.0.2 或更高版本”,所以我认为我很高兴......

但是,当我明确下载该 4.0.2 补丁并安装它时,我得到了它的工作......

【讨论】:

【参考方案8】:

如here所述,您需要安装Dot Net 4.0.2或更高版本。 4.0位不理解LocalDB要求的语法

See this question here

您可以下载更新here

【讨论】:

我已经下载了最新的。这是我的 Help->About ... 显示的内容: Microsoft Visual Studio 2010 版本 10.0.40219.1 SP1Rel Microsoft .NET Framework 版本 4.0.30319 SP1Rel 我想你有最新的。就像我的一样。检查 Presentation.Core.dll 版本为 4.0.30319.275(与微软更新文章中的 245 相比)

以上是关于版本 11 的 localdb 的连接字符串是啥的主要内容,如果未能解决你的问题,请参考以下文章

vs2017 打开附带的localdb v13

Visual Studio 2015 中缺少 LocalDB?

LocalDb 未指定的初始目录?

java web的servlet能正常访问,但是reload就抛出下面的异常:说啥没有关闭啥连

代码优先更新数据库使用未指定的localdb连接字符串

修改 EF的默认连接工厂为 Sql Server 而不是LocalDb