我正在尝试进行 Entity Framework (http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx)的代码首次演练。

我拥有最新的SQL Server Express,并且在通过命令行检查可用版本时(sqllocaldb信息):我看到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=...",但是没有用。

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

最佳答案

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字符,后跟格式为xx.x的LocalDB发行版本号。例如,v11.0代表SQL Server2012。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是默认的公共(public)实例,test是我手动创建的私有(private)实例。
  • 如果您已经有数据库(.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 实用程序,这很可悲。

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

    10-05 21:23
    查看更多