Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接字符串与整洁ORM不工作_C#_Asp.net Mvc_Connection String_Dapper - Fatal编程技术网

C# 连接字符串与整洁ORM不工作

C# 连接字符串与整洁ORM不工作,c#,asp.net-mvc,connection-string,dapper,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 conn

我创建了以下存储库文件

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


下面是我的一个项目中的一个示例代码块。这对我来说很好。请参阅

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);
        }
使用(IDbConnection连接=新的SqlConnection(ConnectionString))
{
//质疑
string query=“query”;
DynamicParameters dp=新的DynamicParameters();
dp.Add(“@userName”,userName,DbType.AnsiString);
返回connection.Query(Query,commandType:commandType.storedProcess,param:dp);
}

您没有在集成安全选项行中同时指定Integrated Security=True和Sql用户ID

如果指定了用户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);
            }
        }
    }
}
namespace ProjectName.Repository
{
公共类SMRTRepository:IDashboard
{
私有SqlConnection OpenConnection()
{
string constr=ConfigurationManager.ConnectionString[“ConnectionString”].ToString();
SqlConnection con=新的SqlConnection(cont);
con.Open();
返回con;
}
....
公共IEnumerableSelect(字符串查询过滤器)
{
使用(SqlConnection cnn=this.OpenConnection())
{
返回cnn.Query(queryFilter);
}
}
}
}

当然,您也可以在不同的类中分离这两个方法,并使用第一个方法作为静态方法,为您需要构建的所有其他存储库类提供服务。这样,周围就没有全局对象,使用块也可以确保在出现异常时正确清理一次性对象。

Integrated Security=True或User ID=?选择one@Steve我尝试了
integratedsecurity=SSPI
然后它也不起作用了&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;在以下的格式中如果使用Integrated Security=True,则忽略用户ID和密码。当然,这意味着SQLServer能够将您的windows用户识别为database@Steve那么,我可以在这里使用什么呢?为什么这回答了这个问题?那么连接字符串应该用于你的方法呢?我只想删除用户ID和密码部分。但是,如果您在PC上本地安装了Sql Server Express,则该连接应能正常工作。我将尝试使用调试器检查此代码的每个部分是否都返回预期结果。特别是我们试图从配置文件中读取connectionstring的部分。