但是现在有用户哪里读不到数据,报错了,就报我SqldataRead没有读取到数据,dr["User_ID"],第一个列读取就报错了

解决方案 »

  1.   

    #region 根据登陆的user_Id 获取用户信息
            public static Ksd_User_Info GetUserByUserId(string userid)
            {
                string Connstring2 = ConfigurationManager.ConnectionStrings["Conn_public"].ConnectionString;
                SqlConnection con = new SqlConnection(Connstring2);
                try
                {
                    Ksd_User_Info userinfo = null;
                    string sql = "select * from ksd_user_info where [user_id]='" + userid + "'";
                    con.Open();
                    SqlCommand command = new SqlCommand(sql, con);
                    SqlDataReader dr = command.ExecuteReader();
                    if (dr!=null)
                    {
                        if (dr.Read())
                        {
                            userinfo = new Ksd_User_Info();
                            if (dr["User_Id"] != null)
                                userinfo.User_Id = Convert.ToString(dr["User_Id"]);
                            if (dr["User_Pwd"] != null)
                                userinfo.User_Pwd = Convert.ToString(dr["User_Pwd"]);
                            if (dr["User_tencode"] != null)
                                userinfo.User_tencode = Convert.ToString(dr["User_tencode"]);
                            if (dr["user_epname"] != null)
                                userinfo.Epname = Convert.ToString(dr["user_epname"]);
                            if (dr["User_endtime"] != null)
                                userinfo.User_endtime = Convert.ToString(dr["User_endtime"]);
                            if (dr["user_epname"] != null)
                                userinfo.Owner = Convert.ToString(dr["user_epname"]);
                            if (dr["User_setnumber"] != null)
                                userinfo.User_setnumber = Convert.ToString(dr["User_setnumber"]);
                            if (dr["User_regtime"] != null)
                                userinfo.User_regtime = Convert.ToString(dr["User_regtime"]);
                            if (dr["User_type"] != null)
                                userinfo.User_type = Convert.ToString(dr["User_type"]);
                            if (dr["User_begtime"] != null)
                                userinfo.User_begtime = Convert.ToString(dr["User_begtime"]);
                            if (dr["User_nownumber"] != null)
                                userinfo.User_nownumber = Convert.ToString(dr["User_nownumber"]);
                            if (dr["User_bank"] != null)
                                userinfo.User_bank = Convert.ToString(dr["User_bank"]);
                            if (dr["User_billno"] != null)
                                userinfo.User_billno = Convert.ToString(dr["User_billno"]);
                            if (dr["User_fax"] != null)
                                userinfo.User_fax = Convert.ToString(dr["User_fax"]);
                            if (dr["User_phone"] != null)
                                userinfo.User_phone = Convert.ToString(dr["User_phone"]);
                            if (dr["User_pname"] != null)
                                userinfo.User_pname = Convert.ToString(dr["User_pname"]);
                            if (dr["User_sales"] != null)
                                userinfo.User_sales = Convert.ToString(dr["User_sales"]);
                            if (dr["User_zip"] != null)
                                userinfo.User_zip = Convert.ToString(dr["User_zip"]);
                            if (dr["User_active"] != null)
                                userinfo.User_active = Convert.ToInt32(dr["User_active"]);
                            if (dr["User_email"] != null)
                                userinfo.User_email = Convert.ToString(dr["User_email"]);
                            if (dr["User_address"] != null)
                                userinfo.User_address = Convert.ToString(dr["User_address"]);
                        }
                    }
                    dr.Close();
                    dr.Dispose();
                    con.Close();
                    con.Dispose();
                    return userinfo;
                }
                catch (Exception ex)
                {
                    con.Close();
                    con.Dispose();
                    throw ex;
                }
                finally
                {
                    con.Close();
                    con.Dispose();
                }
            }
            #endregion
    这是我的方法代码,错误就出在userinfo.User_Id = Convert.ToString(dr["User_Id"]);这一行,错误信息就只有一个列名,其他都没有
      

  2.   

    是不是数据库设置了区分大小写哦?
    改成user_id试试
     if (dr["user_id"] != null)
                                userinfo.User_Id = Convert.ToString(dr["user_id"])
      

  3.   


    我不太关心你这个问题到底是什么造成的,我关心的是你的程序开发方法的错误造成了你这种“懦弱”的开发结果:在你的程序中,不要胡乱写什么try...catch。去掉它,你的调试器可以捕获错误,你能够动手去调试,去看看变量、调用堆栈、InnerException信息等等。这个时候(自己有一点调试概念了)再求助别人才好!
      

  4.   


    我不太关心你这个问题到底是什么造成的,我关心的是你的程序开发方法的错误造成了你这种“懦弱”的开发结果:在你的程序中,不要胡乱写什么try...catch。去掉它,你的调试器可以捕获错误,你能够动手去调试,去看看变量、调用堆栈、InnerException信息等等。这个时候(自己有一点调试概念了)再求助别人才好!这些我都懂,最开始我也没加try  cath这些,但是我在本地单用户根本就没一点问题,打了断点,都不会报错,就是把程序放到网上,操作的人多了就会出现这样的情况,而且加了try cath和没加报的错误信息是一样的
      

  5.   

    如果整什么try...catch这样的人有一个特点,就是只会问别人“可能原因是什么?”然后一通瞎试,而自己连个像样的带点“分析”的问题陈述都拿不出来。对待这样的情况,我们只用说一句:你先让调试器在应该调试的语句上中断。
      

  6.   

    这是我把网站放到IIS上面,使用人多了之后才会出现的错误
      

  7.   

    SqldataRead不会自动关键sql链接,一但超出数据库所设定的量就会报错using(SqlDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection)){
      ....
    }
      

  8.   


    你看看我的帖子内容,我是说同时调用这个方法的时候经常读不到数据,不是从来都读不到应该与这个无关,感觉与static什么的有关,就是同时读取时静态得到的是非空数据信息,但其实另一人没读到,所以索引出界。只是猜想,最好debug一下,有结果告诉我们
      

  9.   


    你看看我的帖子内容,我是说同时调用这个方法的时候经常读不到数据,不是从来都读不到应该与这个无关,感觉与static什么的有关,就是同时读取时静态得到的是非空数据信息,但其实另一人没读到,所以索引出界。只是猜想,最好debug一下,有结果告诉我们除了方法是静态,字段没有静态的,难道跟方法是静态的有关?我试试
      

  10.   

    感觉返回为SqlDataReader多好,然后再处理。楼主解决了告诉我们一声,我们也好学到东西。
      

  11.   


    不要用SqldataRead
    用dataset吧。
      

  12.   

    错误已解决,是static的问题,不是静态变量,是静态方法,我公司前一个程序猿把所有的方法都写成了静态方法,开始我还没发现,现在说出来,希望对大家有帮助,静态方法是不会释放内存的,所以千万不要在数据层写成静态方法,这回把你或者把别人坑死