求大神看看一段代码,急!!!!!!!!!
#region 根据登陆的user_Id 获取用户信息
public static Ksd_User_Info GetUserByUserId(string userid)
{
try
{
Ksd_User_Info userinfo = null;
string sql = "proc_ckq_GetUserinfobyUerId";
string Connstring2 = ConfigurationManager.ConnectionStrings["Conn_public"].ConnectionString;
SqlConnection con = new SqlConnection(Connstring2);
con.Open();
SqlCommand command = new SqlCommand(sql,con);
command.CommandType = CommandType.StoredProcedure;
SqlParameter[] para = new SqlParameter[]{
new SqlParameter("@user_id",userid) };
command.Parameters.AddRange(para);
SqlDataReader dr = command.ExecuteReader();
if (!dr.IsDBNull(0))
{
if (dr.Read())
{
userinfo = new Ksd_User_Info();
if (!(dr["User_Id"] is DBNull))
userinfo.User_Id = Convert.ToString(dr["User_Id"]);
if (!(dr["User_Pwd"] is DBNull))
userinfo.User_Pwd = Convert.ToString(dr["User_Pwd"]);
if (!(dr["User_tencode"] is DBNull))
userinfo.User_tencode = Convert.ToString(dr["User_tencode"]);
if (!(dr["epname"] is DBNull))
userinfo.Epname = Convert.ToString(dr["epname"]);
if (!(dr["User_endtime"] is DBNull))
userinfo.User_endtime = Convert.ToString(dr["User_endtime"]);
if (!(dr["owner"] is DBNull))
userinfo.Owner = Convert.ToString(dr["owner"]);
if (!(dr["User_setnumber"] is DBNull))
userinfo.User_setnumber = Convert.ToString(dr["User_setnumber"]);
if (!(dr["User_regtime"] is DBNull))
userinfo.User_regtime = Convert.ToString(dr["User_regtime"]);
if (!(dr["User_type"] is DBNull))
userinfo.User_type = Convert.ToString(dr["User_type"]);
if (!(dr["User_begtime"] is DBNull))
userinfo.User_begtime = Convert.ToString(dr["User_begtime"]);
if (!(dr["User_nownumber"] is DBNull))
userinfo.User_nownumber = Convert.ToString(dr["User_nownumber"]);
if (!(dr["User_bank"] is DBNull))
userinfo.User_bank = Convert.ToString(dr["User_bank"]);
if (!(dr["User_billno"] is DBNull))
userinfo.User_billno = Convert.ToString(dr["User_billno"]);
if (!(dr["User_fax"] is DBNull))
userinfo.User_fax = Convert.ToString(dr["User_fax"]);
if (!(dr["User_phone"] is DBNull))
userinfo.User_phone = Convert.ToString(dr["User_phone"]);
if (!(dr["User_pname"] is DBNull))
userinfo.User_pname = Convert.ToString(dr["User_pname"]);
if (!(dr["User_sales"] is DBNull))
userinfo.User_sales = Convert.ToString(dr["User_sales"]);
if (!(dr["User_zip"] is DBNull))
userinfo.User_zip = Convert.ToString(dr["User_zip"]);
if (!(dr["User_active"] is DBNull))
userinfo.User_active = Convert.ToInt32(dr["User_active"]);
if (!(dr["User_email"] is DBNull))
userinfo.User_email = Convert.ToString(dr["User_email"]);
if (!(dr["User_address"] is DBNull))
userinfo.User_address = Convert.ToString(dr["User_address"]);
}
}
dr.Close();
con.Close();
return userinfo;
}
catch (Exception ex)
{
throw ex;
}
}
上面这段代码都什么问题,自己看不出来,但是登录用户多了会报错,应该就是读不到数据错误信息如下:
Exception information:
Exception type: IndexOutOfRangeException
Exception message: User_Id
Request information:
Request URL: http://www.ksdinfo.com/User/Default.aspx
Request path: /User/Default.aspx
User host address: 116.231.140.119
User:
Is authenticated: False
Authentication Type:
Thread account name: IBMWEBSERVER2\Administrator
Thread information:
Thread ID: 7
Thread account name: IBMWEBSERVER2\Administrator
Is impersonating: False
Stack trace: 在 KSDDAL.ls.service.KsdUserInfoService.GetUserByUserId(String userid) 位置 E:\源码卢\back1\KSDDAL\ls\service\KsdUserInfoService.cs:行号 177
在 temp_Default.Page_Load(Object sender, EventArgs e)
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
报错是第一个列哪里的User_Id 就报一个User_Id 看不懂 求指导
[解决办法]
你catch里面也应该把连接关闭,不然下次打开还是错误!
[解决办法]
之前的登陆没有正常关闭数据库的链接。估计所谓正常的“登陆”也抛出异常了吧,建议加catch的断点试试这个假设。
[解决办法]
你修改一下try...catch段
try{
}
catch{
}
finally{
connection.Close()
}
最好在finally里面完成关闭。
再有你检查一下你本机数据,是否和服务器一样。
[解决办法]
是不是表中没有该列
另外,最后在finally中关闭连接,保证异常的时候也会关闭连接!
[解决办法]
在存储过程中使用事务
[解决办法]
if (!dr.IsDBNull(0)) <<=这句话有问题
把这一层的 if (!dr.IsDBNull(0)) 去掉
只要下面这个 if (dr.Read()) 就可以了
dr.IsDBNull 这个是用来判断有记录时,某一列是否为空值
所以先Read()
[解决办法]
dr["User_Id"] dr里头没有User_Id
[解决办法]
请看17楼。