簡體   English   中英

連接到客戶端計算機上的數據庫時發生異常

[英]Exception when connecting to database on client machine

我創建了一個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>

錯誤消息...它給出的提示有時是兔子的尾巴。 基本上錯誤是說“我無法連接到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

阿卡,你跑那樣的東西嗎?

(來自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”代替您的值。

關鍵是“ attachdbfilename”。 這是“即時”附加數據庫的方法。

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

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

“本地SQL Server Express上的用戶實例”

enter code here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM