1

我创建了一个 WPF 应用程序,它使用实体框架和 SQL Server 2012 作为数据库。它在我的机器上运行良好。但是当我在客户端机器上运行它时,我收到了异常。当我尝试在数据库中添加记录时会发生这种情况。

异常:基础提供程序因打开内部异常而失败:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,........

连接字符串:

<connectionStrings><add name="SchoolModelContext" 
    connectionString="metadata=res://*/SchoolModel.csdl|res://*/SchoolModel.ssdl|res://*/SchoolModel.msl;
    provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;
    initial catalog=&quot;SCHOOLDB.MDF&quot;
    integrated security=True;MultipleActiveResultSets=True;
    App=EntityFramework'" providerName="System.Data.EntityClient" />
</connectionStrings>
4

1 回答 1

0

错误消息......它给出了有时是兔子轨迹的提示。基本上错误是说“我无法连接到 sql Server,有问题”。

但是..你说你在客户端上“安装了 SqlLocalDB”。

您是否“连接”了新数据库 (SCHOOLDB)?

http://msdn.microsoft.com/en-us/library/hh212961.aspx

A. 创建 LocalDB 实例

以下示例使用 SQL Server 2012 二进制文件创建名为 SCHOOLDB 的 SQL Server Express LocalDB 实例并启动该实例。

SqlLocalDB.exe create "SCHOOLDB" 11.0 -s

Aka,你跑过这样的事情吗?

(来自 MSDN 文章的其他信息可能与此问题无关)

B. 使用 LocalDB 的共享实例

使用管理员权限打开命令提示符。

SqlLocalDB.exe create "SCHOOLDB"
SqlLocalDB.exe share "SCHOOLDB" "SchoolSharedLocalDB"
SqlLocalDB.exe start "SCHOOLDB"
SqlLocalDB.exe info "SCHOOLDB"
REM The previous statement outputs the Instance pipe name for the next step
sqlcmd –S np:\\.\pipe\SCHOOLDB#<use your pipe name>\tsql\query
CREATE LOGIN NewLogin WITH PASSWORD = 'Passw0rd!!@52'; 
GO
CREATE USER NewLogin;
GO
EXIT

执行以下代码以使用 NewLogin 登录连接到 LocalDB 的共享实例。

sqlcmd –S (localdb)\.\SchoolSharedLocalDB -U NewLogin -P Passw0rd!!@52

编辑 ::: (仅在此行上方阅读以获得一般理解......请参阅下面我实际执行的步骤)

好的,以上内容有点令人困惑,因为很难知道您是在处理 ~instance 还是数据库。

让我们试试这个:

SqlLocalDB.exe create "MySuperCoolLocalExpressInstance"
SqlLocalDB.exe share "MySuperCoolLocalExpressInstance" "MySuperCoolLocalExpressInstanceSHARED"
SqlLocalDB.exe start "MySuperCoolLocalExpressInstance"
SqlLocalDB.exe info "MySuperCoolLocalExpressInstance"

现在,非常重要的是,获得您非常独特的“命名管道”值。

np:\\.\pipe\LocalDB#<use your pipe name>\tsql\query

将您的 SchoolDB.mdf 和 SchoolDB.ldf 复制到:

c:\MyCoolLocalDatabaseFiles\

现在将您的连接字符串设置为:

<connectionStrings>
  <add name="SchoolModelContext"
    connectionString="metadata=res://*/SchoolModel.csdl|res://*/SchoolModel.ssdl|res://*/SchoolModel.msl;
    provider=System.Data.SqlClient;provider connection string=&quot;data source=np:\\.\pipe\LOCALDB#MYUNIQUEPIPENAME\tsql\query;attachdbfilename=C:\MyCoolLocalDatabaseFiles\SchoolDB.mdf;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

但是用“MYUNIQUEPIPENAME”代替你的值。

关键是“附加数据库文件名”。这就是“即时”附加数据库的方法。

您有一些使用命名管道语法的替代方法。看:

http://www.connectionstrings.com/sql-server-2012

“本地 SQL Server Express 上的用户实例”

enter code here
于 2013-03-01T22:18:34.563 回答