簡體   English   中英

DAPPER ORM的ConnectionString不起作用

[英]ConnectionString with DAPPER ORM not working

我創建了以下存儲庫文件

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>

但是然后當我運行它時,它沒有連接到數據庫,在Visual Studio的“服務器資源管理器”窗口中,我可以看到連接字符串連接到沒有紅色圖標的數據庫

我的方法有什么問題

您沒有同時指定Integrated Security = True和Sql User ID。 正如MSDN在Integrated Security選項行上所解釋的

如果指定了用戶ID和密碼,並且Integrated Security設置為true,則將忽略用戶ID和密碼,並使用Integrated Security。

這意味着您必須在安裝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);
            }
        }
    }
}

當然,您也可以將這兩種方法放在不同的類中,並將第一種方法用作服務於您需要構建的所有其他存儲庫類的靜態方法。 這樣,周圍就不會有全局對象,並且using塊可確保在發生異常情況下也能正確清理一次性對象。

下面是我的一個項目的示例代碼塊。 它對我來說很好。 請參考

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);
        }

暫無
暫無

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

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