Slash

习惯在追逐的过程中不断去完善自己;当你不再去追逐,你自我完善的脚步也就停滞下来了。

导航

浅谈单步调试


       花了几个月的构思,经过一星期的奋战,终于把数据库设计及一些类基本搞定,虽然自觉缺陷步少,但还是有那么一点欣慰的,^_^,昨天晚上写了注册及登录页面测试设计结果,错误出现!

        每次在填写注册信息提交后,Message.Text显示"注册失败!",而打开数据表查看用户信息,发现已经添加至数据库,百思不得其解.以下为提交触发事件代码:               

private void Button1_Click(object sender, System.EventArgs e)
  {
   if(Page.IsValid==true)
   {
    //考虑到匿名用户购物情况,应该还执行一个购物车号转移操作
    string userName=UserName.Text.Trim();
    string password=Password.Text.Trim();
    string email=Email.Text.Trim();
    string address=Address.Text.Trim();

    EasybuyExcuData userInfo=new EasybuyExcuData();

    String tempCartID=userInfo.GetCartID();
    String userID=userInfo.AddUser(userName,password,"",email,"","","",address,"");

    if(userID !="")
    {
     FormsAuthentication.SetAuthCookie(userID,false);

     userInfo.TransplantShoppingCart(tempCartID,userID);

     Response.Cookies["Easybuy_UserName"].Value=Server.HtmlEncode(userName);

     Response.Redirect("TestLink.aspx");
    }
    else
    {
     ErrorMessage.Text="注册失败!该用户名已经被人注册过了!";
    }
  同时AddUser()方法代码经过调试没有任何错误,根据以上情况初步分析,已经执行了数据插入操作,但返回值UserID为空,但不知如何解决!!

AddUser()中得部分代码

   try
   {
    myConnection.Open();

    //执行不返回数据的数据库操作
    myCommand.ExecuteNonQuery();

    myConnection.Close();

    int UserID=(int)parameterUserID.Value;

    return UserID.ToString();
   }
    //若出错则返回空值
   catch
   {
    return String.Empty;
   }

   想起单步调试,于是在userInfo.AddUser()处设置断点,发现程序执行进至catch语句块

产生错误信息,再回存储过程一看,才想起由于前几天自己的欠缺,误以为数据库自增默认的Identity为int 4  类型,为了以后客户增加需要给设置成bigint(8)型.采用单步调试,发现执行了数据插入操作,却又转入catch代码段,推想抛出异常,检查对应的AddUser存储过程,才发现都是采用bigint型,而代码中均使用int型进行强制类型转化,不能实现,故抛出异常!这时才猛然醒悟!后来一查SQL帮助文档才知道自己原来的想法是错误的,Identity int 4也能自增到大于四位以上,而int型的范围-2^31-2^31仍然不变!于是将所有bigint型改回int(4)自增类型,问题解决!善用单步调试,这时自己才算是深有体会,于是赶紧找到关于应用程序调试方面视频讲座细看!!!

posted on 2006-02-22 01:34  Slash  阅读(859)  评论(0编辑  收藏  举报