localdb for version 11的连接字符串是什么

时间:2012-05-10 18:51:12

标签: c# sql-server connection-string sql-server-2012 localdb

我正在尝试执行实体框架的代码优先演练(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=...",但无效。

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

8 个答案:

答案 0 :(得分:95)

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字符,后跟Localx版本号,格式为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;"
    
  3. 您可以通过编程方式创建自己的数据库:

    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实用程序,这很难过。

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

答案 1 :(得分:17)

我安装了上面提到的.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 framework 3.5编译的,但SqlLocalDb仅适用于DotNet 4.0。

纠正后,问题解决了。

答案 2 :(得分:12)

这是一个相当古老的主题,但是自从我今天重新安装我的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 :(得分:9)

我有一点同样的问题。 我注意到我有:

Data Source= (localdb)\v11.0"

只需添加一个反斜杠就可以解决我的问题:

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

答案 4 :(得分: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

中解释的方法

答案 5 :(得分:1)

您需要按照here安装Dot Net 4.0.2或更高版本 4.0位不理解LocalDB

所需的语法

See this question here

您可以下载更新here

答案 6 :(得分: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补丁并安装它时,我得到了它的工作....

答案 7 :(得分:0)

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

甚至 .NET 3.5 程序也成功连接并执行SQL。

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