2016-10-05 45 views
1

我創建下列庫文件的ConnectionString與DAPPER ORM不工作

using Dapper; 
using System.Configuration; 

namespace ProjectName.Repository 
{ 
    public class SMRTRepository : IDashboard 
    { 
     public SqlConnection con; 
     //To Handle connection related activities 
     private void connection() 
     { 
      string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
      con = new SqlConnection(constr); 
     } 

     ......... 
    } 
} 

然後在該項目中創建一個app.config文件來定義連接字符串,

的App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="ConnectionString" connectionString="Data Source=USER-PC;Initial Catalog=DBNAME;User ID=sa;Password=****;Integrated Security=True;" providerName="System.Data.sqlclient"/> 
    </connectionStrings> 
</configuration> 

但是當我運行這個,它沒有連接到DB,在Visual Studio中的服務器資源管理器窗口中,我可以看到連接字符串連接到D無紅色圖標

什麼是錯的B我的方法

+0

_Integrated Security = True_或_User ID = ...._?選擇一個 – Steve

+0

@Steve我試過'集成安全性= SSPI'那麼它也沒有工作 –

+0

的providerName =「System.Data.SqlClient的」 - 刪除以下格式 '「服務器=服務器這個 使用;數據庫=數據庫名;用戶「ID = sa; Password = pass」' 或 '「Data Source = .; Initial Catalog = dbName; Integrated Security = True」 – GauravKP

回答

0

下面是從我的項目的一個示例代碼塊。它爲我工作很好。請參閱

using (IDbConnection connection = new SqlConnection(ConnectionString)) 
     { 
      // Query 
      string query = "Query"; 

      DynamicParameters dp = new DynamicParameters(); 
      dp.Add("@userName", userName, DbType.AnsiString); 

      return connection.Query<Model>(query, commandType: CommandType.StoredProcedure, param: dp); 
     } 
+0

爲什麼這回答這個問題? – Steve

2

您不指定Integrated Security = True和Sql用戶ID。由於explained by MSDN在集成安全性選項線

如果指定用戶ID和密碼,集成安全性設置 爲true,用戶ID和密碼將被忽略,並集成 安全將被使用。

這意味着您必須在安裝Sql Server時啓用Windows集成,並且您當前的Windows用戶列在該服務器的接受用戶之間。

另一個可能的問題是由於某種對全局連接對象的處理不當造成的。作爲一種好的做法,最好避免像連接這樣的全球一次性物體。

我會改變你的類是

namespace ProjectName.Repository 
{ 
    public class SMRTRepository : IDashboard 
    { 
     private SqlConnection OpenConnection() 
     { 
      string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
      SqlConnection con = new SqlConnection(constr); 
      con.Open(); 
      return con; 
     } 
     .... 

     public IEnumerable<Something>Select(string queryFilter) 
     { 
      using (SqlConnection cnn = this.OpenConnection()) 
      { 
       return cnn.Query<Something>(queryFilter); 
      } 
     } 
    } 
} 

當然,你也可以在不同的類中的兩種方法分離,使用第一種方法爲服務,你需要建立所有其他存儲庫類的靜態方法。通過這種方式,周圍沒有全局對象,並且使用塊可以確保在出現異常情況時也可以正確清理一次性對象。

+0

那麼連接字符串應該用什麼來實現你的方法?' –

+0

我只是刪除用戶名和密碼部分。但是,如果您已經在本地安裝在您的PC上,Sql Server Express連接應該按預期工作。我會嘗試使用調試器來檢查這段代碼的每個部分是否返回預期的結果。特別是我們嘗試從配置文件中讀取連接字符串的部分。 – Steve