66

我正在尝试执行实体框架的 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=..."但在那里无济于事。

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

4

8 回答 8

100
  1. 需要将 .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。先验证一下。

  1. 接下来,您需要有一个LocalDb. 默认情况下,您有一个实例,其名称是单个v字符,后跟 LocalDB 版本号,格式为 xx.x。例如,v11.0代表 SQL Server 2012。默认情况下,自动实例是公共的。您还可以拥有私有的命名实例。命名实例提供与其他实例的隔离,并且可以通过减少与其他数据库用户的资源争用来提高性能。您可以使用该实用程序检查实例的状态SqlLocalDb.exe(从命令行运行它)。

  2. 接下来,您的连接字符串应如下所示:

    “服务器=(localdb)\v11.0;集成安全=真;” 或者

    “数据源=(localdb)\test;集成安全=true;”

从你的代码他们都是一样的。注意两个\\必需的,因为\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;"
    

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

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的实用程序,这是可悲的..

于 2013-02-22T19:12:52.160 回答
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 已正确安装并运行。那么我无法使用此连接字符串通过.Net 代码连接到 SqlLocalDB 的原因是什么:Server=(LocalDB)\v11.0;Integrated Security=true;

然后我意识到我的应用程序是为 DotNet 框架 3.5 编译的,但 SqlLocalDb 仅适用于 DotNet 4.0。

改正后,问题就解决了。

于 2012-09-05T18:18:21.827 回答
17

这是一个相当古老的线程,但由于我今天重新安装了我的 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;"
于 2016-09-14T10:07:15.543 回答
9

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

Data Source= (localdb)\v11.0"

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

Data Source= (localdb)\\v11.0"
于 2014-12-05T15:47:43.240 回答
3

在 Sql Server 2008 R2 数据库文件中,您可以连接

Server=np:\\.\pipe\YourInstance\tsql\query;InitialCatalog=yourDataBase;Trusted_Connection=True;

仅,但在 sql Server 2012 中,您可以使用:

服务器=(localdb)\v11.0;集成安全=true;数据库=DB1;

这取决于您的.mdf .ldf版本。

为了找到程序,我使用了这篇文章中解释的这个方法

于 2013-09-05T16:22:22.310 回答
1

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

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

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

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

于 2012-06-19T06:36:54.240 回答
1

您需要安装此处提到的 Dot Net 4.0.2 或更高版本。
4.0 位不理解 LocalDB 所需的语法

在这里看到这个问题

您可以在此处下载更新

于 2012-05-10T18:56:38.907 回答
0

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

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

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

于 2013-02-24T10:56:43.573 回答