首页 文章

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

提问于
浏览
61

我正在尝试执行实体框架的代码优先演练(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();

我试过用 "Server=..." 替换 "Data Source=..." 但在那里无济于事 .

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

8 回答

  • 94

    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;"
    

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

    • If you have a database (.mdf file) already:
    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
    • If you don't have a Sql Server database:
    "Server=(localdb)\\v11.0;Integrated Security=true;"
    

    您可以通过编程方式创建自己的数据库:

    a) to save it in the default location with default setting:

    var query = "CREATE DATABASE myDbName;";
    

    b) To save it in a specific location with your own custom settings:

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

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

  • 3

    我安装了上面提到的.Net 4.0.2更新,但是我收到了同样的错误消息:

    Build 与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 .

    纠正之后,问题就解决了 .

  • 1

    这是一个相当老的线程,但是自从我今天重新安装我的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;"
    
  • 0

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

    Data Source= (localdb)\v11.0"
    

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

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

    在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中解释的方法

  • 17

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

    See this question here

    您可以下载更新here

  • 9

    对于那些本来会像我这样努力工作的人来说......这种看似微不足道的事情让我浪费了半天多的时间......

    如果要从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补丁并安装它时,我得到了它的工作....

  • 10

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

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

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

相关问题