关于,net更新机制 高手请进 已经挂了2天了 没办法解决版主是否可以帮忙(在线等)

passacc67 2008-05-28 08:12:53
存储过程如下:
CREATE PROCEDURE Update_FinishedProductPlan 
@FinishedProductPlanDate char(10),
@TradeMode char(50),
@Article char(30),
@Colour char(20),
@ColourCode char(40),
@PlannedHides int,
@SRLNo char(10),
@Priority int,
@Destination char(50),
@Remarks char(100),
@FinishedProductPlanDate_Old char(10),
@TradeMode_Old char(50),
@Article_Old char(30),
@Colour_Old char(20),
@ColourCode_Old char(40),
@PlannedHides_Old int,
@SRLNo_Old char(10),
@Priority_Old int,
@Destination_Old char(50),
@Remarks_Old char(100)


AS

begin transaction
update FinishedProductPlan
set FinishedProductPlanDate=@FinishedProductPlanDate,TradeMode=@TradeMode,Article=@Article,Colour=@Colour,ColourCode=@ColourCode,PlannedHides=@PlannedHides,SRLNo=@SRLNo,Priority=@Priority,Destination=@Destination,Remarks=@Remarks
where FinishedProductPlanDate=@FinishedProductPlanDate_Old and TradeMode=@TradeMode_Old --and Article=@Article_Old and Colour=@Colour_Old and ColourCode=@ColourCode_Old and PlannedHides=@PlannedHides_Old and SRLNo=@SRLNo_Old and Priority=@Priority_Old and Destination=@Destination_Old and Remarks=@Remarks_Old
if @@error <>0
begin
rollback transaction
raiserror('error',16,1)
return
end
commit transaction
GO

更新逻辑如下:

Private Function CreatUpdateCommand() As OleDbCommand
Dim cmd As New OleDbCommand("update_FinishedProductPlan", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim pc As OleDbParameterCollection = cmd.Parameters
pc.Add("FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")
pc.Add("TradeMode", OleDbType.Char, 50, "TradeMode")
pc.Add("Article", OleDbType.Char, 30, "Article")
pc.Add("Colour", OleDbType.Char, 20, "Colour")
pc.Add("ColourCode", OleDbType.Char, 4, "ColourCode")
pc.Add("PlannedHides", OleDbType.Integer, 4, "PlannedHides")
pc.Add("SRLNo", OleDbType.Char, 10, "SRLNo")
pc.Add("Priority", OleDbType.Integer, 4, "Priority")
pc.Add("Destination", OleDbType.Char, 50, "Destination")
pc.Add("Remarks", OleDbType.Char, 100, "Remarks")
Dim param As OleDbParameter
param = pc.Add("FinishedProductPlanDate_Old", OleDbType.Char, 10, "FinishedProductPlanDate")
param.SourceVersion = DataRowVersion.Original
pc.Add("TradeMode_Old", OleDbType.Char, 50, "TradeMode")
param.SourceVersion = DataRowVersion.Original
pc.Add("Article_Old", OleDbType.Char, 30, "Article")
param.SourceVersion = DataRowVersion.Original
pc.Add("Colour_Old", OleDbType.Char, 20, "Colour")
param.SourceVersion = DataRowVersion.Original
pc.Add("ColourCode_Old", OleDbType.Char, 4, "ColourCode")
param.SourceVersion = DataRowVersion.Original
pc.Add("PlannedHides_Old", OleDbType.Integer, 4, "PlannedHides")
param.SourceVersion = DataRowVersion.Original
pc.Add("SRLNo_Old", OleDbType.Char, 10, "SRLNo")
param.SourceVersion = DataRowVersion.Original
pc.Add("Priority_Old", OleDbType.Integer, 4, "Priority")
param.SourceVersion = DataRowVersion.Original
pc.Add("Destination_Old", OleDbType.Char, 50, "Destination")
param.SourceVersion = DataRowVersion.Original
pc.Add("Remarks_Old", OleDbType.Char, 100, "Remarks")
param.SourceVersion = DataRowVersion.Original
Return cmd
End Function

但是发觉无法更新 我的目的 是要更新前比对下数据库的数据是否更改 如果更改抛出异常 但是现在就算不改变也无法更新 高手帮我看下
...全文
123 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
why_aircraft 2008-05-29
  • 打赏
  • 举报
回复
mark
AManStudio 2008-05-29
  • 打赏
  • 举报
回复
应该如下:
[Quote=引用 6 楼 lzmtw 的回复:]
pc.Add("FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")
能对得上
@FinishedProductPlanDate 吗?

是否应该是
pc.Add("@FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")
[/Quote]
只在此山中 2008-05-28
  • 打赏
  • 举报
回复
你的存储过程无论更不更改都不会抛出异常,最多就是更新0行(更新失败)或1行(更新成功),除非参数错误.
如果要知道更改否,要检查更新影响了多少行.
只在此山中 2008-05-28
  • 打赏
  • 举报
回复
改为:
更新逻辑如下:
Private Function CreatUpdateCommand() As OleDbCommand
Dim cmd As New OleDbCommand("update_FinishedProductPlan", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim pc As OleDbParameterCollection = cmd.Parameters
pc.Add("FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")
pc.Add("TradeMode", OleDbType.Char, 50, "TradeMode")
pc.Add("Article", OleDbType.Char, 30, "Article")
pc.Add("Colour", OleDbType.Char, 20, "Colour")
pc.Add("ColourCode", OleDbType.Char, 4, "ColourCode")
pc.Add("PlannedHides", OleDbType.Integer, 4, "PlannedHides")
pc.Add("SRLNo", OleDbType.Char, 10, "SRLNo")
pc.Add("Priority", OleDbType.Integer, 4, "Priority")
pc.Add("Destination", OleDbType.Char, 50, "Destination")
pc.Add("Remarks", OleDbType.Char, 100, "Remarks")
Dim param As OleDbParameter
param = pc.Add("FinishedProductPlanDate_Old", OleDbType.Char, 10,"FinishedProductPlanDate_Old")
pc.Add("TradeMode_Old", OleDbType.Char, 50, "TradeMode_Old")
pc.Add("Article_Old", OleDbType.Char, 30, "Article_Old")
pc.Add("Colour_Old", OleDbType.Char, 20, "Colour_Old")
pc.Add("ColourCode_Old", OleDbType.Char, 4, "ColourCode_Old")
pc.Add("PlannedHides_Old", OleDbType.Integer, 4, "PlannedHides_Old")
pc.Add("SRLNo_Old", OleDbType.Char, 10, "SRLNo_Old")
pc.Add("Priority_Old", OleDbType.Integer, 4, "Priority_Old")
pc.Add("Destination_Old", OleDbType.Char, 50, "Destination_Old")
pc.Add("Remarks_Old", OleDbType.Char, 100, "Remarks_Old")
Return cmd
End Function
只在此山中 2008-05-28
  • 打赏
  • 举报
回复
是啊,应该这样
Private Function CreatUpdateCommand() As OleDbCommand
Dim cmd As New OleDbCommand("update_FinishedProductPlan", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim pc As OleDbParameterCollection = cmd.Parameters
Dim param As OleDbParameter
param = pc.Add("@FinishedProductPlanDate", OleDbType.Char, 10)
param.value="你想要更新的新值"
param = pc.Add("@TradeMode", OleDbType.Char, 50
param.value="同上,下面一样,不写了"
param = pc.Add("@Article", OleDbType.Char, 30)
param = pc.Add("@Colour", OleDbType.Char, 20
param = pc.Add("@ColourCode", OleDbType.Char, 4)
param = pc.Add("@PlannedHides", OleDbType.Integer, 4)
param = pc.Add("@SRLNo", OleDbType.Char, 10 )
param = pc.Add("@Priority", OleDbType.Integer, 4)
param = pc.Add("@Destination", OleDbType.Char, 50)
param = pc.Add("@Remarks", OleDbType.Char, 100)
'
param = pc.Add("@FinishedProductPlanDate_Old", OleDbType.Char, 10)
param.value="你想要对比的旧值"
param = pc.Add("@TradeMode_Old", OleDbType.Char, 50)
param.value="同上,下面一样,不写了"
param = pc.Add("@Article_Old", OleDbType.Char, 30)
param = pc.Add("@Colour_Old", OleDbType.Char, 20)
param = pc.Add("@ColourCode_Old", OleDbType.Char, 4)
param = pc.Add("@PlannedHides_Old", OleDbType.Integer, 4)
param = pc.Add("@SRLNo_Old", OleDbType.Char, 10)
param = pc.Add("@Priority_Old", OleDbType.Integer, 4)
param = pc.Add("@Destination_Old", OleDbType.Char, 50)
param = pc.Add("@Remarks_Old", OleDbType.Char, 100)
Return cmd
End Function
水如烟 2008-05-28
  • 打赏
  • 举报
回复
pc.Add("FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")
能对得上
@FinishedProductPlanDate 吗?

是否应该是
pc.Add("@FinishedProductPlanDate", OleDbType.Char, 10, "FinishedProductPlanDate")

amandag 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 passacc67 的回复:]
那这样我所有的old的参数都要自己取? 就是我在第一次取出数据的同时就要把old的数据取出来 手动的留下我第一取数据的副本是吗?但是我在csdn里看到通过DataRowVersion.Original 的参数 可以自动取出副本

[/Quote]
这个是如果你使用DataGridView这样的数据绑定控件时,它可以帮你做这件事情
沐NeMo 2008-05-28
  • 打赏
  • 举报
回复
呵呵。可以看参考我的问题:
http://topic.csdn.net/u/20080408/17/31afeefc-3575-4c46-8eba-04501fede12c.html
http://topic.csdn.net/u/20080311/17/de3bc5bc-56cc-4c6c-bf9e-7af8be0ccce9.html

passacc67 2008-05-28
  • 打赏
  • 举报
回复
那这样我所有的old的参数都要自己取? 就是我在第一次取出数据的同时就要把old的数据取出来 手动的留下我第一取数据的副本是吗?但是我在csdn里看到通过DataRowVersion.Original 的参数 可以自动取出副本

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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