asp.net中sql语句中写了update语句 但是执行后数据库数据没有更新

时间:2020-12-14 13:28:55
protected void Page_Load(object sender, EventArgs e)
        {

            
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            using (SqlConnection mycon = new SqlConnection("Data source=(local);Initial Catalog=CourseWebsite;Integrated Security=True"))
            {
               
                mycon.Open();
              
                    string password;
                    password = TextBox2.Text.Trim();
                    string mail;
                    mail = Request["remail"];
                    SqlCommand cmd = new SqlCommand("update userinfo set password='" + password + "' where mail=@mail", mycon);
                    cmd.Parameters.Add(new SqlParameter("@mail", mail));
                    cmd.ExecuteNonQuery();
                    Response.Redirect("密码修改成功.aspx");
               


            }
        }

15 个解决方案

#1


可以看一下mail字段的类型是nvarchar还是varchar,再去看下它的数据,可能最后面还是最前面有N个空格.

#2


不是这个问题

#3


那你试下用拼接字符串的形式写SQL语句,看下是不是参数的问题.,打上断点,再查看SQL语句,把SQL语句拿到SQL中运行看.

#4


没有 
            
protected void Page_Load(object sender, EventArgs e)
        {

           //在这里面要写个,获取数据.能读取到你要修改的数据
         if(!IsPostBack)
{
  InitModel();  //这个是获取数据的代码
}
        }
  public Void InitModel()
{
int id=int.Parse(Request.QueryString["id"]);   //这里面的id 是你前台传过的id
//然后给每个控件赋值    把数据库的值取到在控件里面显示
}

#5


引用 4 楼 ll445480823 的回复:
没有 
            
protected void Page_Load(object sender, EventArgs e)
        {

           //在这里面要写个,获取数据.能读取到你要修改的数据
         if(!IsPostBack)
{
  InitModel();  //这个是获取数据的代码
}
        }
  public Void InitModel()
{
int id=int.Parse(Request.QueryString["id"]);   //这里面的id 是你前台传过的id
//然后给每个控件赋值    把数据库的值取到在控件里面显示
}


只要在数据库里显示更新后的数据 不用显示到控件上

#6


你的条件没找到,就是说mail=‘’  数据库没有这个可能是,你打断电调试,看看sql语句具体是什么,然后直接拿sql语句去执行看看能不能成功
,或者是不是你的页面没有刷新

#7





你先用字符串拼接的方式..看sql语句是否正确..
再选择使用参数的方式 执行sql..

确保sql语句正确性.

#8


(local) 换 .  试试 

#9


你看看执行后,改变了几条记录 0条的话就是你语句出问题了。

#10


这种问题都是粗心大意导致的, 楼主自己多检查检查.每个变量的值是否是你以为的那个值.
另外,明明 @mail 用传参数的, password 却不传, 这是故意留的漏洞吗?

#11


int rows=cmd.ExecuteNonQuery();
看返回值到底是啥

#12


拼接字符串容易出问题的,遇到这样的问题,我基本上是打个断点,然后把得到的语句,放到数据库里边去测试下,看看是否正确!

#13


打断点调试一下,在检查你类库里面的数据成员和你数据库里面是不是对应的!还有楼上说的看看你的参数的类型是不是对应的!

#14


来看看。学习一下,以前我也遇到过。

#15


password='" + password 也用参数,怎么又是拼字符串又是参数化,统一下 ,为了规范再加上这句cmd.CommandType=CommandType.Text 还有建议楼主不要中文命名

#1


可以看一下mail字段的类型是nvarchar还是varchar,再去看下它的数据,可能最后面还是最前面有N个空格.

#2


不是这个问题

#3


那你试下用拼接字符串的形式写SQL语句,看下是不是参数的问题.,打上断点,再查看SQL语句,把SQL语句拿到SQL中运行看.

#4


没有 
            
protected void Page_Load(object sender, EventArgs e)
        {

           //在这里面要写个,获取数据.能读取到你要修改的数据
         if(!IsPostBack)
{
  InitModel();  //这个是获取数据的代码
}
        }
  public Void InitModel()
{
int id=int.Parse(Request.QueryString["id"]);   //这里面的id 是你前台传过的id
//然后给每个控件赋值    把数据库的值取到在控件里面显示
}

#5


引用 4 楼 ll445480823 的回复:
没有 
            
protected void Page_Load(object sender, EventArgs e)
        {

           //在这里面要写个,获取数据.能读取到你要修改的数据
         if(!IsPostBack)
{
  InitModel();  //这个是获取数据的代码
}
        }
  public Void InitModel()
{
int id=int.Parse(Request.QueryString["id"]);   //这里面的id 是你前台传过的id
//然后给每个控件赋值    把数据库的值取到在控件里面显示
}


只要在数据库里显示更新后的数据 不用显示到控件上

#6


你的条件没找到,就是说mail=‘’  数据库没有这个可能是,你打断电调试,看看sql语句具体是什么,然后直接拿sql语句去执行看看能不能成功
,或者是不是你的页面没有刷新

#7





你先用字符串拼接的方式..看sql语句是否正确..
再选择使用参数的方式 执行sql..

确保sql语句正确性.

#8


(local) 换 .  试试 

#9


你看看执行后,改变了几条记录 0条的话就是你语句出问题了。

#10


这种问题都是粗心大意导致的, 楼主自己多检查检查.每个变量的值是否是你以为的那个值.
另外,明明 @mail 用传参数的, password 却不传, 这是故意留的漏洞吗?

#11


int rows=cmd.ExecuteNonQuery();
看返回值到底是啥

#12


拼接字符串容易出问题的,遇到这样的问题,我基本上是打个断点,然后把得到的语句,放到数据库里边去测试下,看看是否正确!

#13


打断点调试一下,在检查你类库里面的数据成员和你数据库里面是不是对应的!还有楼上说的看看你的参数的类型是不是对应的!

#14


来看看。学习一下,以前我也遇到过。

#15


password='" + password 也用参数,怎么又是拼字符串又是参数化,统一下 ,为了规范再加上这句cmd.CommandType=CommandType.Text 还有建议楼主不要中文命名