新手请教数据不能(update)

潜水的鱼 2004-11-19 03:29:22

private void btnAlter_Click(object sender, System.EventArgs e)
{
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmd = new OleDbCommand(@"update [user] set Name=@Name, Code=@Code, UserPassWord=@UserPassWord where id=@id", conn);

// MessageBox.Show(cmd.Parameters.Count.ToString());

cmd.Parameters.Add("@Name", txtUserName.Text.Trim().ToString());
cmd.Parameters.Add("@Code", txtUserCode.Text.Trim().ToString());
cmd.Parameters.Add("@id", int.Parse(txtId.Text.Trim().ToString()));
if (txtPassWord.Text.Trim().ToString() != txtReturnPassWord.Text.Trim().ToString())
{
MessageBox.Show("密码不一至");
return;
}
cmd.Parameters.Add("@UserPassWord", txtPassWord.Text.Trim().ToString());

try
{
conn.Open();
/* 测试, 有数据
foreach (OleDbParameter p in cmd.Parameters)
MessageBox.Show(p.Value.ToString());
*/
int i = cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("数据修改成功");
this.lvInfoDataBind();
}
catch(OleDbException x)
{
MessageBox.Show(x.Message);
}
catch(Exception x)
{
MessageBox.Show(x.Message);
}

}


大家帮帮忙,看看哪里有误, 运行完后, 会有“数据修改成功”提示,但没有任何错误提示, 可实际上数据没有修改成功
...全文
187 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
潜水的鱼 2004-11-26
  • 打赏
  • 举报
回复
UP
潜水的鱼 2004-11-24
  • 打赏
  • 举报
回复
to : 回复人: 5461339(黑郁金香) ( ) 信誉:100

你方法已试, 我的是access数据库,

把你的 ..., SqlDbType.NVarChar, ...

改为 OleDbType.VarChar, 40)

我是用vs2003编辑, 在后面输出"."时, 没有选择的菜单(Value), 不懂是为什么, 如果正确的话, 应该有个选择的下拉框
nchen123 2004-11-24
  • 打赏
  • 举报
回复
没有 Value 的提示是对的, 这个本来就没有。
就像有的时候你想 .ToString()
虽然没有, 但是你这么输入是没错的。
潜水的鱼 2004-11-24
  • 打赏
  • 举报
回复
自己再UP
潜水的鱼 2004-11-24
  • 打赏
  • 举报
回复
UP
5461339 2004-11-23
  • 打赏
  • 举报
回复
你的问题好象出在这里
cmd.Parameters.Add("@Name", txtUserName.Text.Trim().ToString());
cmd.Parameters.Add("@Code", txtUserCode.Text.Trim().ToString());
cmd.Parameters.Add("@id", int.Parse(txtId.Text.Trim().ToString()));
我感觉应该这样写
cmd.Parameters.Add("@Name",SqlDbType.NVarChar,40).Value=txtUserName.Text.Trim().ToString());
cmd.Parameters.Add("@Code",SqlDbType.NVarChar,40).Value=txtUserCode.Text.Trim().ToString());
cmd.Parameters.Add("@id", SqlDbType.Int).Value=int.Parse(txtId.Text.Trim().ToString()));
潜水的鱼 2004-11-23
  • 打赏
  • 举报
回复
UP
潜水的鱼 2004-11-22
  • 打赏
  • 举报
回复
to: 回复人: zx_fly(Heero)


不能, 没解决问题, 倒使过程参数, 一个都没有
潜水的鱼 2004-11-22
  • 打赏
  • 举报
回复
谢谢楼上, 我试试看.^_^
zx_fly 2004-11-20
  • 打赏
  • 举报
回复
cmd.Parameters["@Name"].value=txtUserName.Text;
用这个试试呢?我也不知道问题在哪里,不过以前用你那个代码写的时候我也碰到过问题,后来用这种方式写就可以了。原因不知道,我水平也不高哈,你试试看吧^_^
nchen123 2004-11-20
  • 打赏
  • 举报
回复
:)

他作的是 WinForm, 不是 WebForm, 也许没有说清楚。 Page_Load 从何谈起。
MyBadBoy 2004-11-20
  • 打赏
  • 举报
回复
private void Page_Load(object sender, System.EventArgs e)
点击button先执行Page_Load
断点查看值的变化
潜水的鱼 2004-11-20
  • 打赏
  • 举报
回复
晕, 狐狸老大, 咋也来了,
nchen123 2004-11-20
  • 打赏
  • 举报
回复
这两点都试过了,的确有点闹鬼。
由于你坚持用 Access, 那么到底后面执行了什么语句也无法获知。 要是 sql server 就能简单的抓到了。
潜水的鱼 2004-11-20
  • 打赏
  • 举报
回复
to: 回复人: thinkingforever(努力学习)

to: 回复人: yanyzty(yyz)

------------------------------------

值是肯定有的, 我已用下面代码, 测试过了

/* 测试, 有数据
foreach (OleDbParameter p in cmd.Parameters)
MessageBox.Show(p.Value.ToString());
*/




回复人: fellowcheng(头都编大了)


看过, i = 0
fellowcheng 2004-11-19
  • 打赏
  • 举报
回复
i的值是否>0
yanyzty 2004-11-19
  • 打赏
  • 举报
回复
设置断点,看是否取到值,在查询分析器里测一下
给你个例子

SqlParameter myParm = cm.Parameters.Add("@dataname", SqlDbType.NVarChar, 7);
string year=DateTime.Now .Year.ToString ();
string month=DateTime.Now.Month.ToString () ;
if(month=="1")
{
year=Convert.ToString (Convert.ToInt32 (year)-1);
month="12";
}
else
{ month=Convert.ToString (Convert.ToInt32 (month)-1);}
if(month.Length ==1)
month="0"+month;

myParm.Value =year+"-"+month ;
cm.ExecuteNonQuery ();
thinkingforever 2004-11-19
  • 打赏
  • 举报
回复
代码看不出有什么错误!在更新时传的这些参数的值是正确的吗,会不会是以前的值?
如果是web 应用程序在
if(!IsPostBack)
{
在这里给txtUserName.....这些赋值.
}

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧