带有DAPPER ORM的ConnectionString无法正常工作

时间:2016-10-05 11:32:03

标签: c# asp.net-mvc connection-string dapper

我创建了以下存储库文件

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的服务器资源管理器窗口中,我可以看到连接到DB而没有红色图标的连接字符串

我的做法有什么不对

2 个答案:

答案 0 :(得分:2)

您没有指定Integrated Security = True和Sql用户ID。作为集成安全选项行上的explained by MSDN

  

如果指定了用户ID和密码,则设置了Integrated Security   如果为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);
            }
        }
    }
}

当然,您也可以将不同类中的两个方法分开,并将第一个方法用作静态方法,该方法为您需要构建的每个其他存储库类提供服务。通过这种方式,周围没有全局对象,并且使用块确保在异常的情况下正确清理一次性对象。

答案 1 :(得分: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);
        }