2013-06-05 72 views
0

我在Winforms應用程序中使用實體框架。實體框架連接字符串啓用conncet到數據庫服務器

當我設置scsb.DataSource =「localhost」的每一件事工作正常,但是當我嘗試連接到onother DB服務器,我得到一個例外:

"**The underlying provider failed on Open**." 

任何幫助嗎?

 public DistributionSSEntities1 Connection() 
     { 
     var scsb = new SqlConnectionStringBuilder(); 
     scsb.DataSource = "192.168.1.100"; 
     scsb.InitialCatalog = "DistributionSS"; 
     scsb.IntegratedSecurity = true; 
     //------------------------ 
     EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(); 
     builder.Metadata ="res://*/Model.Model.csdl|res://*/Model.Model.ssdl|res://*/Model.Model.msl"; 
     builder.Provider = "System.Data.SqlClient"; 
     builder.ProviderConnectionString = scsb.ConnectionString; 
     DistributionSSEntities1 db = new DistributionSSEntities1(builder.ToString()); 
     return db; 
    } 
+0

檢查此[鏈接](http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/091b1eac-4ed6-43b8-b184-a713d1f2b9eb) –

+0

做該服務器作品?嘗試先使用vs studio訪問它。檢查你的網絡配置連接字符串。 – BizApps

+0

您確定您有試圖訪問的服務器的Windows身份驗證帳戶 – rajansoft1

回答

0
public DistributionSSEntities Connection() 
    { 
     string ConString = "SERVER=192.168.1.100;DATABASE=DistributionSS;UID=sa;PASSWORD=125;"; 
     SqlConnectionStringBuilder SCB= new SqlConnectionStringBuilder(ConString); 
     //------------------------ 
     EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(); 
     builder.Metadata = "res://*/Model.Model.csdl|res://*/Model.Model.ssdl|res://*/Model.Model.msl"; 
     builder.Provider = "System.Data.SqlClient"; 
     builder.ProviderConnectionString = SCB.ConnectionString; 
     DistributionSSEntities db = new DistributionSSEntities(builder.ToString()); 
     return db; 
    } 
2

是否已將遠程Sql設置爲允許遠程連接?是否允許遠程Sql通過Windows防火牆訪問......有很多原因導致它無法連接。

您正在使用集成安全性 - 這對於本地Sql可能有用;但運行WinForm應用程序的網絡用戶必須具有訪問遠程框的正確權限。

我建議開始消除可能做到以下幾點:

  1. 檢查目標服務器上的SQL日誌。這總是有一個嘗試失敗的確切原因 - 而不是你通過異常得到的淡化版本。 (例如C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL11.SQLEXPRESS \ MSSQL \ LOG)

  2. 連接到它使用SQL的用戶名密碼 - 沒有集成安全性,以確保它不是那麼

  3. 防火牆

編輯

重要的是要記住,錯誤信息返回給客戶端就登錄嘗試失敗是有意模糊的或不很重要形成 - 限制攻擊者獲得足夠的信息來改善攻擊(見the technet article)。因此,檢查Sql Server日誌是必要的 - 如果您的登錄/連接嘗試實際將其發送到服務器。

從文章:

爲了提高安全性,返回給客戶端 錯誤消息有意隱藏身份驗證錯誤的性質。但是,在 SQL Server錯誤日誌中,相應的錯誤包含映射到身份驗證失敗條件的錯誤 狀態。將 錯誤狀態與以下列表進行比較,以確定 登錄失敗的原因。

相關問題