注册 登录
编程论坛 ASP.NET技术论坛

求助!我的代码错在哪里?

zhangruan 发布于 2008-05-15 11:57, 1274 次点击
我写了个登陆后修改密码的代码,可是修改总是不成功,麻烦朋友们帮忙看看,谢谢!
数据库表是putongyonghu,用户名是UserId,密码是pwd.
下面的代码对验证旧密码是否正确和新密码是否重复,都能实现,就是更改不了数据库表中用户密码!
string username=Session["UserId"].ToString().Trim();//取得用户名
string password=Session["pwd"].ToString().Trim();//取得旧密码
            
string Pwd=this.TBpass.Text;//旧密码框
string pass=this.TBnewpass.Text;//密码框
string cpass=this.TBnewpass2.Text;//确认密码框
if(password.Trim()!=this.TBpass.Text)
{
  this.Response.Write("<script>alert('旧密码不正确!');</script>");
  return;
}
else
{
   if(pass != cpass)
  {
    this.Response.Write("<script>alert('两次输入的密码不一致!');</script>");
    return;
  }
   else
  {
     string sqlConnString="server=.;Uid=sa;Pwd=sa;Database=zra".ToString();
     SqlConnection conn=new SqlConnection(sqlConnString);
    string sql="update putongyonghu set pwd='"+this.TBnewpass.Text+"' where UserId='"+username.Trim()+"'";
     SqlCommand cm=new SqlCommand("sql",conn);
     conn.Open();
    try
   {  
    int resultrow=cm.ExecuteNonQuery();
    conn.Close();
    this.Response.Write("<script>alert('操作已成功!');</script>");

    }
    catch
    {
      conn.Close();
     }

       }
}
问题不清楚的我还可以在补充,麻烦大家帮忙看下,我是新手,实在是找不出问题在哪了!谢谢
11 回复
#2
hebingbing2008-05-15 12:09
int resultrow=cm.ExecuteNonQuery(); 问题应该在这,我看你的int resultrow也没有用嘛。
如果resultrow没有用的话直接改成
cm.ExecuteNonQuery();
如果你用到了的话,用convent转换成int型的……
#3
zhangruan2008-05-15 13:21
版主 ,还是不行,修改的密码添补到数据库表里去,是不是还有其他的原因??
#4
hebingbing2008-05-15 13:52
这个肯定是你的try的时候出现了错误,所以跳出了try……
你可以将try先注释掉,看看到底是什么错误……
还有你的UserId字段是什么?是用户名吗?要是不是的话你where的时候却是where他们两相等了……
#5
zhangruan2008-05-15 14:01
我把try注释掉了,在运行,还是和原来一样,运行的时候没有错误,就是无法把修改的密码添加到数据库表中。
UserId字段是用户名
#6
lovexran2008-05-15 16:17
回复 1# 的帖子
你用设个断点试试吧!
#7
hebingbing2008-05-15 16:42
你注释掉了try运行不出错的话,那就是where语句后面的条件不成立……
也就是说UserId='"+username.Trim()+"'这句不成立
#8
zhangruan2008-05-15 17:27
{System.Data.SqlClient.SqlConnection}   
             {System.Data.SqlClient.SqlConnection}   
          _constr:   {System.Data.SqlClient.SqlConnectionString}   
          _fIsClosing:   false   
          _hidePasswordPwd:   false   
          _infoMessageEventHandler:   <未定义的值>   
          _internalConnection:   <未定义的值>   
          _localTransaction:   <未定义的值>   
          _objectState:   Closed   
          _preparedCommands:   <未定义的值>   
          _reader:   <未定义的值>   
          _sdc:   <未定义的值>   
          _SqlClientPermission:   <未定义的值>   
          _stateChangeEventHandler:   <未定义的值>   
             ConnectionString    "server=.;Uid=sa;Pwd=sa;Database=zra"    
          ConnectionTimeout:   15   
          Database:   "zra"   
          DataSource:   .  
          IsClosing:   false   
          IsShiloh:   <错误:   发生   {System.NullReferenceException}   类型的异常>   
          LocalTransaction:   <未定义的值>   
          PacketSize:   8192   
          Parser:   <未定义的值>   
          Reader:   <未定义的值>   
          ServerVersion:   <错误:   发生   {System.InvalidOperationException}   类型的异常>   
          SqlClientPermission:   {System.Data.SqlClient.SqlClientPermission}   
          State:   Closed   
          WorkstationId    "ZRA-35C1CA64B76"    
这是我设断点,在自动窗口显示的内容,是什么意识阿?我才开始学,看不懂。是不是连接不上数据库?
#9
hoya2008-05-16 09:22
1.检查数据库链接string sqlConnString="server=.;Uid=sa;Pwd=sa;Database=zra".ToString();
是否有问题;
2.SqlCommand cm=new SqlCommand("sql",conn);
这句是错的,new SqlCommand("sql",conn);sql是不加引号的,引用上面定义的变量sql。

[[it] 本帖最后由 hoya 于 2008-5-16 09:24 编辑 [/it]]
#10
zhangruan2008-05-16 09:56
这句是错的,new SqlCommand("sql",conn);sql是不加引号的,引用上面定义的变量sql

就是这个错误!!
终于解决了~

谢谢大家了!~~
#11
kevintang2008-05-16 10:20
#12
lavender_lhy2008-05-29 16:07
彻底服了,你验证旧密码直接一个ajax去数据库取数据然后验证输入的是否一致就好了,两次输入密码的直接拿JS验证不就完事了,何必都提交到服务器去验证呢。。。。
1