这个问题困扰本人两天了.昨天在CSDN请教过.得到网友们的热心回答,但还是不能解决.开始我是一下想更新两个表结果不成功.于是
我改成更新一个表..
思路是.先将数据表中的相关数据读出来放在textbox中去.然后再对文本框中的内容修改.放到数据库中.
.代码如下:using (SqlConnection con = db.connection())
            {
             SqlCommand cmd = new SqlCommand("update depuser set depuser ='"+text1.Text+"',text2.text = '"+this.deppass2.Text+"',text3.text= '"+ this.username3.Text+" where departmentid="+int.Parse(Session["departmentid"].ToString()),con);
             try
             {
                 con.Open();
                 cmd.ExecuteNonQuery();
                 Response.Write("<script>window.alert('操作成功!')</script>");
                                     }
              catch (Exception ex)
                {
                  throw new Exception(ex.Message, ex);
                  Response.Write("<script>window.alert('操作失败!')</script>");
                 }
结果提示"操作成功!",但是数据库中的数据并没有改变.我试过用更新存储过程.结果依然是一样的.

解决方案 »

  1.   

    string sql="update depuser set depuser = '"+text1.Text+" ',text2.text =  '"+this.deppass2.Text+" ',text3.text=  '"+ this.username3.Text+" where departmentid="+int.Parse(Session["departmentid"].ToString()
    把sql打出来看看.
      

  2.   

    ,text2.text =  '"+this.deppass2.Text+" ',text3.text=  '"+ this.username3.Text+" 这一句没有看懂,你写的什么东东...更新语句好像没有这个样子吧
      

  3.   

    haha
    ,text2.text =   '"+this.deppass2.Text+"  ',text3.text=   '"+ this.username3.Text+"  这一句没有看懂,你写的什么东东...更新语句好像没有这个样子吧那是你没太细想.
    楼主的 text1表示一个字段值, text2表示一个数据表列. hehe
      

  4.   

    不好意思,我看错了. 楼主写的确实不对. text2.text这些放到SQL语句中了.
      

  5.   

    这个问题都把我搞乱了.糊涂了哇.哎.
    大家再看看这个.
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.CommandText = "update_depuser_1";
     cmd.Connection = con;
    cmd.Parameters.Add(new SqlParameter("@DepartMentID_1",SqlDbType.Int));
     cmd.Parameters.Add(new SqlParameter("@depuser_2",SqlDbType.Char,20));
                     cmd.Parameters.Add(new SqlParameter("@deppass_3",SqlDbType.Char,30));
                     cmd.Parameters.Add(new SqlParameter("@username_4",SqlDbType.VarChar,50));
      cmd.Parameters["@DepartMentID_1"].Value=Session["departmentid"].ToString();
                     cmd.Parameters["@depuser_2"].Value=this.depuser1.Text;
                     cmd.Parameters["@deppass_3"].Value=this.deppass2.Text;
                     cmd.Parameters["@username_4"].Value=this.username3.Text;
               try  {
                           
                       con.Open();
                            cmd.ExecuteNonQuery();
                            Response.Write("<script>window.alert('操作成功!')</script>");
                      }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message, ex);
                            Response.Write("<script>window.alert('操作失败!')</script>");
                        }存储过程是这样的:
    REATE PROCEDURE [update_depuser_1]
    (@DepartMentID_1  [int],
     @depuser_2  [char](20),
     @deppass_3  [char](30),
     @username_4  [varchar](20),

    AS UPDATE [PMS].[dbo].[depuser] SET  [depuser]  = @depuser_2,
     [deppass]  = @deppass_3,
     [username]  = @username_4,

    WHERE 
    ( [DepartMentID]  = @DepartMentID_1)
    GO
      

  6.   

    sql语句 是这样的.:
    "update depuser set depuser = '"+text1.Text+" ',pass='"+this.text2.Text+" ',del='"+ this.text3.Text+" where departmentid="+int.Parse(Session["departmentid"].ToString()),
      

  7.   

    如果你是指一条SQL语句更新两个表就把两个SQL文都用“;”结束拼写在一起 然后执行命令就可以了
      

  8.   

    1, 存储过程里.
     [username]  = @username_4, where ..
    这里还能有豆号? 当然,参数那里也多了豆号
    你是省略了些东西吧2, cmd.Parameters["@DepartMentID_1"].Value=Session["departmentid"].ToString(); 
    int型的,能这么赋值你的vs都不报错?
      

  9.   

    是int.parse(Session["departmentid"].ToString()) 我是转化过了的.我调试时候,我就取消了INT.结果是一样的哈.
    我真的晕倒了.
      

  10.   

    创建update日志表
    CREATE TABLE depuserUpdateLOG
    (id IT identity(1,1),updatetime DATETIME not null DEFAULT getdate(),updateDpuser VARCHAR(20),thisTimeUpdateRowNUM)修改存储过程,看看到底有没有执行update操作ALTER PROCEDURE [update_depuser_1] 
    (@DepartMentID_1  [int], 
     @depuser_2  [char](20), 
     @deppass_3  [char](30), 
     @username_4  [varchar](20)AS UPDATE [PMS].[dbo].[depuser]  SET  [depuser]  = @depuser_2, 
     [deppass]  = @deppass_3, 
     [username]  = @username_4
    WHERE  
    ( [DepartMentID]  = @DepartMentID_1) 
    INSERT depuserUpdateLOG(updateDpuser,thisTimeUpdateRowNUM) SELECT depuser,@@ROWCOUNT FROM INSERTED在asp.net页面执行一次操作,就看一下updatelog看看,有没有写记录
      

  11.   

    这里敲错了.手误CREATE TABLE depuserUpdateLOG
    (id INT identity(1,1),updatetime DATETIME not null DEFAULT getdate(),updateDpuser VARCHAR(20),thisTimeUpdateRowNUM)
    或者你也可以打开SQL事件查探器,看看执行了操作没有
      

  12.   

    唉, 给你解决问题,我自己都昏了. 存储过程中,触发器都出现了...汗
    CREATE TABLE depuserUpdateLOG
    (id IT identity(1,1),updatetime DATETIME not null DEFAULT getdate(),thisTimeUpdateRowNUM INT)--修改存储过程,看看到底有没有执行update操作 
    SQL codeALTER PROCEDURE [update_depuser_1] 
    (@DepartMentID_1  [int], 
     @depuser_2  [char](20), 
     @deppass_3  [char](30), 
     @username_4  [varchar](20)AS UPDATE [PMS].[dbo].[depuser]  SET  [depuser]  = @depuser_2, 
     [deppass]  = @deppass_3, 
     [username]  = @username_4
    WHERE  
     [DepartMentID]  = @DepartMentID_1
    INSERT depuserUpdateLOG(thisTimeUpdateRowNUM) SELECT depuser,@@ROWCOUNT
      

  13.   

    你在存储过程中加了写操作日志的insert操作. 那么你在页面执行后, dpuserUpdateLOG表中有无变化
      

  14.   

    你不要老盯着结果啊, 不然我要你插操作日志干什么啊看dpuserUpdateLOG有无记录变化,从而进一步分析问题可能出在哪里.
    如果 dpuserUpdateLOG 没有写入记录,说明存储过程根本没执行. 你要检查数据库服务器是否运行正常,及检查代码中,有没有可能某个路径会跳过执行存储过程的代码.如果 dpuserUpdateLOG 写入了记录,但 thisTimeRowNUM 值写入 0 那么即说明, 存储过程被执行了,但是 update语句并没有更新dpuser表,那么你需要检测 你的departmentid参数传入值是什么, 用这个值能不能查到记录
         如果插入了记录, 而且 thisTimeRowNUM >0 那么说明,首先存储过程被执行了, 而且update语句更新了表, 但你表中记录却没有变化, 那么这里,你需要查的就不是 update语句是否被正确执行, 而是看数据库服务器做了什么设置. 比如用了 instead of触发器,将操作回滚了等等之类的一些设置. 这都需要多方面检查.你就一句" 还是更新不了 ,郁闷" 这不是让我白费工夫吗
      

  15.   

    ("update depuser set depuser = '"+text1.Text+" ',text2.text =  '"+this.deppass2.Text+" ',text3.text=  '"+ this.username3.Text+" 
    是针对那一个内容
    看不懂
      

  16.   

    还有一种可能,就是你在Page_load 的时候从数据库里提取值赋给文本框,让后改变文本框里的值,点击更新按钮把更改后的值存回数据库。
    如果是这样的话,不知道你在page_load 的时候有没有做IsPostBack的判断,如果没有,那么你是永远都不能把你修改后的值存回数据库的,他始终是原来的值。
    原因是你在点击更新按钮的时候,会促发page_load的事件,是发生在button_click之前的,他里面的代码会又从数据库里提取值冲掉你对文本框做的修改,所以当代码执行到button_click里面的时候,等于是把数据库里的值提出来又存了一遍。不知道是不是这种情况, 在page_load代码里加个 if (!IsPostBack )看看。