access 写的更新语句,怎么弄都不能更新成功,真的“被access”。。。。。

raymond123456 2010-08-10 02:54:47

/// <summary>
/// 修改
/// </summary>
/// <param name="shipper"></param>
/// <returns></returns>
public static int UpdateShipper(Shipper shipper)
{
AccessHelper access = new AccessHelper();
string sql = "update ShipperInfo set shipper_customerId=@customerId,shipper_fromBussinessName=@fromBussinessName," +
"shipper_contactPerson=@contactPerson,shipper_address=@address,shipper_tel=@tel,shipper_orig=@orig,shipper_codTrade=@codTrade" +
",shipper_codid=@codid,shipper_pickupBy=@pickupBy,shipper_shipperSignature=@shipperSignature,shipper_shipDate=@shipDate," +
"shipper_defaultTag=@defaultTag,shipper_remark=@remark,shipper_custom1=@custom1,shipper_custom2=@custom2,shipper_custom3=@custom3 where ID=@id";
OleDbParameter[] para = new OleDbParameter[]
{
new OleDbParameter("@id",shipper.Id),
new OleDbParameter("@customerId",shipper.Shipper_customerId),
new OleDbParameter("@fromBussinessName",shipper.Shipper_fromBussinessName),
new OleDbParameter("@contactPerson",shipper.Shipper_contactPerson),
new OleDbParameter("@address",shipper.Shipper_address),
new OleDbParameter("@tel",shipper.Shipper_tel),
new OleDbParameter("@orig",shipper.Shipper_orig),
new OleDbParameter("@codTrade",shipper.Shipper_codTrade),
new OleDbParameter("@codid",shipper.Shipper_codid),
new OleDbParameter("@pickupBy",shipper.Shipper_pickupBy),
new OleDbParameter("@shipperSignature",shipper.Shipper_shipperSignature),
new OleDbParameter("@shipDate",shipper.Shipper_shipDate),
new OleDbParameter("@defaultTag",shipper.Shipper_defaultTag),
new OleDbParameter("@remark",shipper.Shipper_remark),
new OleDbParameter("@custom1",shipper.Shipper_custom1),
new OleDbParameter("@custom2",shipper.Shipper_custom2),
new OleDbParameter("@custom3",shipper.Shipper_custom3)
};
int result = access.ExecuteNonQuery(sql, para);
return result;
}


经多次测试,只要把SQL语句里面where ID=@id,此处的参数@id 换成 数字就OK,用参数就有问题(ID为access数据库表的自动增长列,即主键)。。。
请各位指点迷津。。 。
...全文
252 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kpsanmao 的回复:]
你把
new OleDbParameter("@id",Convert.toInt32(shipper.Id)),
放到最后面试试呢
[/Quote]

谢谢,OK了!
寂静的神经 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 amandag 的回复:]
id放到最后

ACCESS的参数认参数顺序而不是参数名字
[/Quote]
10楼 10楼 10楼~
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kpsanmao 的回复:]
你把
new OleDbParameter("@id",Convert.toInt32(shipper.Id)),
放到最后面试试呢
[/Quote]

真的谢谢你啊,OK!
顺便问你一样这个跟顺序有关系?
amandag 2010-08-10
  • 打赏
  • 举报
回复
id放到最后

ACCESS的参数认参数顺序而不是参数名字
寂静的神经 2010-08-10
  • 打赏
  • 举报
回复
你把
new OleDbParameter("@id",Convert.toInt32(shipper.Id)),
放到最后面试试呢
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
换成?还是一样的没有效果。。。。
dyits 2010-08-10
  • 打赏
  • 举报
回复
没用过Access。

楼主试试:
new OleDbParameter(参数名, 类型[, 长度]){Value = 值},
tianshenglong 2010-08-10
  • 打赏
  • 举报
回复
吧 @id 换成 ? 试试
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kpsanmao 的回复:]
哦 没仔细看 还以为你是插入呢

那是不是用参数 参数的类型没指定为 int型啊

C# code
new OleDbParameter("@id",shipper.Id),


改成这样试试呢

C# code
new OleDbParameter("@id",Convert.toInt32(shipper.Id)),
[/Quote]

你那样的写法我之前也测试了 还是一样没有效果
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
此贴不可以沉。。。
raymond123456 2010-08-10
  • 打赏
  • 举报
回复
这个我知道的 我在form里面已经转换了
寂静的神经 2010-08-10
  • 打赏
  • 举报
回复
哦 没仔细看 还以为你是插入呢

那是不是用参数 参数的类型没指定为 int型啊
 new OleDbParameter("@id",shipper.Id),

改成这样试试呢
 new OleDbParameter("@id",Convert.toInt32(shipper.Id)),
寂静的神经 2010-08-10
  • 打赏
  • 举报
回复
自增列 不需要再给参数了

110,546

社区成员

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

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

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