这个问题困扰本人两天了.昨天在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>");
}
结果提示"操作成功!",但是数据库中的数据并没有改变.我试过用更新存储过程.结果依然是一样的.
我改成更新一个表..
思路是.先将数据表中的相关数据读出来放在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>");
}
结果提示"操作成功!",但是数据库中的数据并没有改变.我试过用更新存储过程.结果依然是一样的.
把sql打出来看看.
,text2.text = '"+this.deppass2.Text+" ',text3.text= '"+ this.username3.Text+" 这一句没有看懂,你写的什么东东...更新语句好像没有这个样子吧那是你没太细想.
楼主的 text1表示一个字段值, text2表示一个数据表列. hehe
大家再看看这个.
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
"update depuser set depuser = '"+text1.Text+" ',pass='"+this.text2.Text+" ',del='"+ this.text3.Text+" where departmentid="+int.Parse(Session["departmentid"].ToString()),
[username] = @username_4, where ..
这里还能有豆号? 当然,参数那里也多了豆号
你是省略了些东西吧2, cmd.Parameters["@DepartMentID_1"].Value=Session["departmentid"].ToString();
int型的,能这么赋值你的vs都不报错?
我真的晕倒了.
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看看,有没有写记录
(id INT identity(1,1),updatetime DATETIME not null DEFAULT getdate(),updateDpuser VARCHAR(20),thisTimeUpdateRowNUM)或者你也可以打开SQL事件查探器,看看执行了操作没有
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
如果 dpuserUpdateLOG 没有写入记录,说明存储过程根本没执行. 你要检查数据库服务器是否运行正常,及检查代码中,有没有可能某个路径会跳过执行存储过程的代码.如果 dpuserUpdateLOG 写入了记录,但 thisTimeRowNUM 值写入 0 那么即说明, 存储过程被执行了,但是 update语句并没有更新dpuser表,那么你需要检测 你的departmentid参数传入值是什么, 用这个值能不能查到记录
如果插入了记录, 而且 thisTimeRowNUM >0 那么说明,首先存储过程被执行了, 而且update语句更新了表, 但你表中记录却没有变化, 那么这里,你需要查的就不是 update语句是否被正确执行, 而是看数据库服务器做了什么设置. 比如用了 instead of触发器,将操作回滚了等等之类的一些设置. 这都需要多方面检查.你就一句" 还是更新不了 ,郁闷" 这不是让我白费工夫吗
是针对那一个内容
看不懂
如果是这样的话,不知道你在page_load 的时候有没有做IsPostBack的判断,如果没有,那么你是永远都不能把你修改后的值存回数据库的,他始终是原来的值。
原因是你在点击更新按钮的时候,会促发page_load的事件,是发生在button_click之前的,他里面的代码会又从数据库里提取值冲掉你对文本框做的修改,所以当代码执行到button_click里面的时候,等于是把数据库里的值提出来又存了一遍。不知道是不是这种情况, 在page_load代码里加个 if (!IsPostBack )看看。