我们在 ASP.NET MVC 应用程序中使用自定义成员资格提供程序。我们一直在遇到间歇性“System.InvalidOperationException - 已经有一个打开的 DataReader 与此命令关联,必须先关闭它。” 类的问题,所以我决定启用 MARS。
这是网络配置中的连接字符串...
<add name="CustomMembershipServices" connectionString="User ID=CUSTOM_USER;Password=pwd;Database=OUR_DB;Server=.\SQLEXPRESS;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
我们的代码现在在以下行抛出 ArgumentException: Keyword not supported: 'multipleactiverecordsets'。
protected void CreateAndOpenConnection()
{
// Exception thrown here...
_connection = new SqlConnection(_connectionString);
_connection.Open();
}
以 SQL2005 Express 和 SQL2008 Standard 版本为目标时会出现相同的异常。有什么建议么?
作为对 AdaTheDev 的回应,这里是使用数据读取器的方法......
public bool CheckUserPassword(long userID, string password)
{
bool success = false;
if (!string.IsNullOrEmpty(password))
{
try
{
CreateAndOpenConnection();
using (SqlCommand cmd = CreateSqlCommandForStoredProcedure("CheckPassword"))
{
IPasswordUtility generator = new PasswordUtility();
cmd.Parameters.AddWithValue("UserID", userID);
cmd.Parameters.AddWithValue("Password", generator.HashPassword(password));
using (SqlDataReader reader = cmd.ExecuteReader())
{
success = reader.HasRows;
reader.Close();
}
}
}
finally
{
CloseConnection();
}
}
return success;
}
我看不出这会在同一连接上创建多个数据读取器的任何原因。