更新SQL,无错误,无更新

更新SQL,无错误,无更新,sql,.net,vb.net,oledb,Sql,.net,Vb.net,Oledb,我正试图从表格中填写的数据更新表格。 变量从表单中提取,如下所示: \u JEBatchDate=IIf(Me.textJEBatchDate.Text.Trim.Length>0,Me.textJEBatchDate.Text.Trim,”) 更新sql如下所示 UPDATE[MAIN]设置[CheckNumber]=@CheckNumber、[CheckDate]=@CheckDate、[CheckCashDate]=@CheckAmount、[payenumber]=@payenumbe

我正试图从表格中填写的数据更新表格。
变量从表单中提取,如下所示:

\u JEBatchDate=IIf(Me.textJEBatchDate.Text.Trim.Length>0,Me.textJEBatchDate.Text.Trim,”)
更新sql如下所示

UPDATE[MAIN]设置[CheckNumber]=@CheckNumber、[CheckDate]=@CheckDate、[CheckCashDate]=@CheckAmount、[payenumber]=@payenumber、[AccountNumber]=@AccountNumber、[Bank]=@Bank]=@toorderof、[CheckType]=@CheckType、[datepaperworksenttopaye]=@datepaperworksenttopaye,[DatePaperworkSentToBank]=@DatePaperworkSentToBank,[UncompleteReason]=@UncompleteReason,[RejecteReason]=@RejecteReason,[CaseNumber]=@CaseNumber,[BankStatus]=@BankStatus,[CorrWithPaye]=@CorrWithPayee,[Comments]=@Comments,[BankCredit]=@BankCredit]=@Return]=@Return,[DateFundsRecdFromBank]=@,[DateReturneRecd]=@DateReturned,[DateTargetSent]=@DateTargetSent,[NumberOfTargets]=@NumberOfTargets,[DateCreditPostedToCLI]=@DateCreditPostedToCLI,[DateSentToSGForRepayment]=@DateSentToSGForRepayment,[DateClaimwasreed]=@DateClaimwasreed,[NewCheckNumber]=@NewCheckNumber,[NewCheckAmount]=@NewCheckAmount],存档]=@存档,[JEBatchName]=@JEBatchName,[JEBatchDate]=@JEBatchDate其中[ID]=@ID;
所有值的构造方式如下:

strValues=strValues&“[JEBatchDate]=@JEBatchDate”
在Try…Catch中,参数的构造方式如下:

试试看
使用updateCmd作为新的OleDb.OleDbCommand(UpdateSQL、HMOConnection)
updateCmd.Parameters.AddWithValue(“@ID”,Me.labelID.Text)
updateCmd.Parameters.AddWithValue(“@checknumber”,\u checknumber)
updateCmd.Parameters.AddWithValue(“@checkdate”,\u checkdate)
我使用
updateCmd.ExecuteNonQuery()
执行查询。
代码在Try…Catch中运行,没有错误,但是没有对记录进行更新。我已经仔细检查了所有的名称、拼写、连接,但是仍然没有更新。任何想法或建议都将不胜感激

编辑
如果将此行从上到下移动,则会出现数据类型不匹配错误:


updateCmd.Parameters.AddWithValue(“@ID”,Me.labelID.Text)

存在各种问题:

无更新

显示的代码不足,无法了解正在发生的情况(例如可能是一个空的
Catch
)。这将告诉您提供程序是否成功:


Dim rows=updateCmd.ExecuteNonQuery()
如果它不是零,则它进行了更新。如果您看不到更改,并且数据库是项目的一部分,则可能是查看了错误的数据库副本。请参阅

数据类型不匹配

永远不要使用
AddWithValue
(除非您的名字是Gordon Linoff或Gord Thompson…或Steve)。这会导致提供程序根据数据采用数据类型:


updateCmd.Parameters.AddWithValue(“@ID”,Me.labelID.Text)
如果
ID
列是整数,则传递的是一个字符串-是一个数据不匹配的字符串。其他数据库可能会出现非常非常严重的问题;请使用
Add


updateCmd.Parameters.Add(“@ID”,OleDbType.Integer).Value=Convert.ToInt32(labelID.Text)
我确保所有参数都正确,并将参数名与变量匹配

下一步,OleDB不使用命名参数本身-您必须按照它们在SQL中出现的确切顺序提供每个参数。您的SQL:

UPDATE[MAIN]SET[CheckNumber]=@CheckNumber,
[CheckDate]=@CheckDate,
[CheckCashDate]=@CheckCashDate,。。。
但您不能按该顺序提供参数:


updateCmd.Parameters.AddWithValue(“@ID”,Me.labelID.Text)
updateCmd.Parameters.AddWithValue(“@checknumber”,\u checknumber)
updateCmd.Parameters.AddWithValue(“@checkdate”,\u checkdate)
@ID
应该是最后一个,因为它出现在SQL中的最后一个

不要使用
IIF

\u JEBatchDate=IIf(textJEBatchDate.Text.Trim.Length>0,
textJEBatchDate.Text.Trim,
"")
如果运算符短路,则“新建”
,以便只执行正确或错误部分:

\u JEBatchDate=If(textJEBatchDate.Text.Trim.Length>0,
textJEBatchDate.Text.Trim,
"")

您是否对数据库进行了分析,以查看语句是否命中了预期的数据库,如果是,脚本看起来应该是这样的?此外,您是否尝试直接在SSMS中运行分析查询以确认查询实际上更新了一行?我想使用OleDb时,参数是按照它们的输入顺序设置的命令。请尝试将它们按相同的顺序放置,以便ID位于
updateCmd.Parameters.AddWithValue
列表的末尾。是和是。首先,我确保所有参数都正确,参数名称与变量匹配。然后确保查询详细信息、表和数据库正确。在代码之外运行查询,结果正确es确实会更新指定的行,但在代码中完成时不会更新。
Dim rows=updateCmd.ExecuteNonQuery()
如果行不为零,查询将执行并更新。如果仍然看不到行,问题可能是:您还应该使用
Add
,而不是
AddWithValue
,这会让提供程序猜测您想要什么。是的,在OleDB中,参数是位置性的,它根本不使用名称
updateCmd.parameters.AddWithValue(“@ID”,Me.labelID.Text)
失败,因为您的
ID
列在db上可能是
integer
,但您尝试通过
labelID.Text
将其设置为字符串。请参阅@pluto