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的部分。