【发布时间】:2015-09-04 13:31:31
【问题描述】:
我正在尝试为 ado.net 编写一个包装类,问题是我收到以下错误,我不知道如何解决。
我已经阅读了很多关于此的其他问题,但没有一个使用包装类,因此没有帮助。
谁能指出我正确的方向或提供相同问题的链接,以便我可以阅读如何解决它。还是我完全走错了路。
public List<LoginDetails> Authenticate(string id)
{
const string spName = "dbo.MemberLogin";
List<SqlParameter> parameters = new List<SqlParameter> { new SqlParameter("@Username", id) };
var rdr = _iAdoCommandWrapper.ExecuteDataReaderAsync(DbConnectionAbstractClass.ConnectionString, CommandType.StoredProcedure, spName, parameters.ToArray());
var data = new List<LoginDetails>();
if (rdr.HasRows)
{
while (rdr.Read())
{
data.Add(new LoginDetails
{
UserName = (string)rdr["MemberUsername"],
Password = (string)rdr["MemberPassword"],
MemberId = (string)rdr["MemberID"],
Role = (string)rdr["MemberRole"]
});
}
//-------
rdr.NextResult();
while (rdr.Read())
{
data.Add(new LoginDetails
{
RolesForMember = (string)(rdr["MembersRoles"])
});
}
//----------
}
return data.ToList();// rowsAffected.Result;
}
包装器
public SqlDataReader ExecuteDataReaderAsync(string connectionString, CommandType cmdType, string spName, params SqlParameter[] cmdParameters)
{
//TODO make async once fixed problem
using (var conn = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand(spName, conn))
{
cmd.CommandType = cmdType;
cmd.Parameters.AddRange(cmdParameters);
conn.Open();
return cmd.ExecuteReader(CommandBehavior.Default);
}
}
}
【问题讨论】:
-
rdr依赖于 SqlCommand(它依赖于 SqlConnection)。但在退出ExecuteDataReaderAsync方法之前,这两个对象都会被处理掉。 -
@Ulric 我该如何解决这个问题
-
菲尔普森 见下文...再次。
-
@Ulric 抱歉耽搁了,我的网络中断了