我有以下方法
public static SqlDataReader MenuDataReader(string url)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand("spR_GetChildMenus", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PageUrl", url);
cmd.Parameters.AddWithValue("@MenuId", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@ParentId", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@TitleText", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@ExternalUrl", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@FullUrl", ParameterDirection.Output);
cmd.Parameters.AddWithValue("@ChildCount", ParameterDirection.Output);
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
//return reader;
while (reader.Read())
{
return reader;
}
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼
SqlDataReader reader = MenuDataReader(url);
if (reader.HasRows)
{
while (reader.Read())
{ }}
Run Code Online (Sandbox Code Playgroud)
但我收到错误信息
读取器关闭时无效尝试调用HasRows.
谁能帮我吗
谢谢
这是我的代码,我关闭并打开阅读器,它仍然无法正常工作.一些线程可以同时访问此函数,但存在锁定.它在开始时工作了几次,但迟早我得到了"读取器关闭时无效尝试调用读取"的异常
private IList<BursaUser> GetUsers(SqlCommand cmd)
{
IList<User> users = new List<User>();
User user;
lock (thisLock)
{
SqlDataReader dr = null;
try
{
Conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read())
{
user = new User
{
UserId = Convert.ToInt32(dr["WorkerNum"]),
CompanyName = dr["CompanyName"].ToString(),
WorkerName = dr["WorkerFirstName"] + " " + dr["WorkerFamilyName"],
Phone = dr["Phone"].ToString()
};
if (dr["QueueNum"] != null && dr["QueueNum"] != DBNull.Value)
{
user.Queue = new Queue
{
HasAlreadyEntered =
dr["flgAppear"] != null && dr["flgAppear"].ToString() == "Y",
IsFromWebsite = dr["TookFrom"].ToString() == "1", …Run Code Online (Sandbox Code Playgroud)