相关疑难解决方法(0)

从方法返回datareader

我有以下方法

    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.

谁能帮我吗

谢谢

c# asp.net

7
推荐指数
2
解决办法
2万
查看次数

我一直收到这个错误:"读取器关闭时无效尝试调用Read"

这是我的代码,我关闭并打开阅读器,它仍然无法正常工作.一些线程可以同时访问此函数,但存在锁定.它在开始时工作了几次,但迟早我得到了"读取器关闭时无效尝试调用读取"的异常

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)

.net c# ado.net multithreading datareader

0
推荐指数
1
解决办法
3003
查看次数

标签 统计

c# ×2

.net ×1

ado.net ×1

asp.net ×1

datareader ×1

multithreading ×1