更新 SQL,没有错误,没有更新
Update SQL, no errors, no update
我正在尝试根据填写到表单中的数据更新 table。
变量是从这样的表单中提取的:
_JEBatchDate = IIf(Me.textJEBatchDate.Text.Trim.Length > 0, Me.textJEBatchDate.Text.Trim, "")
更新 sql 看起来像这样...
UPDATE [MAIN] SET [CheckNumber] = @checknumber, [CheckDate] = @checkdate, [CheckCashDate] = @checkcashdate, [CheckAmount] = @checkamount, [PayeeNumber] = @payeenumber, [AccountNumber] = @accountnumber, [Bank] = @bank, [ToTheOrderOf] = @totheorderof, [CheckType] = @checktype, [DatePaperworkSentToPayee] = @datepaperworksenttopayee, [DatePaperworkSentToBank] = @datepaperworksenttobank, [IncompleteReason] = @incompletereason, [RejectReason] = @rejectreason, [CaseNumber] = @casenumber, [BankStatus] = @bankstatus, [CorrWithPayee] = @corrwithpayee, [Comments] = @comments, [BankCredit] = @bankcredit, [Refund] = @refund, [DateFundsRecdFromBank] = @datefundsrecdfrombank, [DateRefundRecd] = @daterefunded, [DateTargetSent] = @datetargetsent, [NumberOfTargets] = @numberoftargets, [DateCreditPostedToCLI] = @datecreditpostedtocli, [DateSentToSGForRepayment] = @datesenttosgforrepayment, [DateClaimWasRepaid] = @dateclaimwasrepaid, [NewCheckNumber] = @newchecknumber, [NewCheckAmount] = @newcheckamount, [ARCHIVED] = @archived, [JEBatchName] = @jebatchname, [JEBatchDate] = @jebatchdate WHERE [ID] = @ID;
所有值都是以这种方式构造的:
strValues = strValues & "[JEBatchDate] = @jebatchdate "
在 Try...Catch 中,参数是这样构造的:
Try
Using updateCmd As New OleDb.OleDbCommand(UpdateSQL, HMOConnection)
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber)
updateCmd.Parameters.AddWithValue("@checkdate", _checkDate)
我使用updateCmd.ExecuteNonQuery()
来执行查询。
代码通过 Try...Catch 运行没有错误,但没有对记录进行更新。我已经仔细检查了所有的名称、拼写、连接,但仍然没有更新。任何想法或建议都将不胜感激!!
编辑
如果我将此行从顶部移动到底部,我会收到数据类型不匹配错误:
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
存在各种问题:
无更新
没有显示足够的代码来了解正在发生的事情(比如可能是空的 Catch
)。这将告诉您提供者是否成功:
Dim rows = updateCmd.ExecuteNonQuery()
如果它不为零,它会更新。如果您看不到更改,并且数据库是项目的一部分,则您可能正在查看错误的数据库副本。参见 Why saving changes to a database fails?
数据类型不匹配
永远不要使用 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)
I made sure all of the parameters were correct, matching the parameter name with the variable.
接下来,OleDB 不使用这样的命名参数 - 您必须按照它们在 SQL 中出现的确切顺序提供每个参数。你的 SQL:
UPDATE [MAIN] SET [CheckNumber] = @checknumber,
[CheckDate] = @checkdate,
[CheckCashDate] = @checkcashdate,...
但是您没有按此顺序提供参数:
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber)
updateCmd.Parameters.AddWithValue("@checkdate", _checkDate)
@ID
应该是最后一个,因为它出现在 SQL
的最后
不要使用IIF
_JEBatchDate = IIf(textJEBatchDate.Text.Trim.Length > 0,
textJEBatchDate.Text.Trim,
"")
"new" If
运算符被短路,因此只执行 true 或 false 部分:
_JEBatchDate = If(textJEBatchDate.Text.Trim.Length > 0,
textJEBatchDate.Text.Trim,
"")
我正在尝试根据填写到表单中的数据更新 table。
变量是从这样的表单中提取的:
_JEBatchDate = IIf(Me.textJEBatchDate.Text.Trim.Length > 0, Me.textJEBatchDate.Text.Trim, "")
更新 sql 看起来像这样...
UPDATE [MAIN] SET [CheckNumber] = @checknumber, [CheckDate] = @checkdate, [CheckCashDate] = @checkcashdate, [CheckAmount] = @checkamount, [PayeeNumber] = @payeenumber, [AccountNumber] = @accountnumber, [Bank] = @bank, [ToTheOrderOf] = @totheorderof, [CheckType] = @checktype, [DatePaperworkSentToPayee] = @datepaperworksenttopayee, [DatePaperworkSentToBank] = @datepaperworksenttobank, [IncompleteReason] = @incompletereason, [RejectReason] = @rejectreason, [CaseNumber] = @casenumber, [BankStatus] = @bankstatus, [CorrWithPayee] = @corrwithpayee, [Comments] = @comments, [BankCredit] = @bankcredit, [Refund] = @refund, [DateFundsRecdFromBank] = @datefundsrecdfrombank, [DateRefundRecd] = @daterefunded, [DateTargetSent] = @datetargetsent, [NumberOfTargets] = @numberoftargets, [DateCreditPostedToCLI] = @datecreditpostedtocli, [DateSentToSGForRepayment] = @datesenttosgforrepayment, [DateClaimWasRepaid] = @dateclaimwasrepaid, [NewCheckNumber] = @newchecknumber, [NewCheckAmount] = @newcheckamount, [ARCHIVED] = @archived, [JEBatchName] = @jebatchname, [JEBatchDate] = @jebatchdate WHERE [ID] = @ID;
所有值都是以这种方式构造的:
strValues = strValues & "[JEBatchDate] = @jebatchdate "
在 Try...Catch 中,参数是这样构造的:
Try
Using updateCmd As New OleDb.OleDbCommand(UpdateSQL, HMOConnection)
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber)
updateCmd.Parameters.AddWithValue("@checkdate", _checkDate)
我使用updateCmd.ExecuteNonQuery()
来执行查询。
代码通过 Try...Catch 运行没有错误,但没有对记录进行更新。我已经仔细检查了所有的名称、拼写、连接,但仍然没有更新。任何想法或建议都将不胜感激!!
编辑
如果我将此行从顶部移动到底部,我会收到数据类型不匹配错误:
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
存在各种问题:
无更新
没有显示足够的代码来了解正在发生的事情(比如可能是空的 Catch
)。这将告诉您提供者是否成功:
Dim rows = updateCmd.ExecuteNonQuery()
如果它不为零,它会更新。如果您看不到更改,并且数据库是项目的一部分,则您可能正在查看错误的数据库副本。参见 Why saving changes to a database fails?
数据类型不匹配
永远不要使用 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)
I made sure all of the parameters were correct, matching the parameter name with the variable.
接下来,OleDB 不使用这样的命名参数 - 您必须按照它们在 SQL 中出现的确切顺序提供每个参数。你的 SQL:
UPDATE [MAIN] SET [CheckNumber] = @checknumber,
[CheckDate] = @checkdate,
[CheckCashDate] = @checkcashdate,...
但是您没有按此顺序提供参数:
updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text)
updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber)
updateCmd.Parameters.AddWithValue("@checkdate", _checkDate)
@ID
应该是最后一个,因为它出现在 SQL
不要使用IIF
_JEBatchDate = IIf(textJEBatchDate.Text.Trim.Length > 0,
textJEBatchDate.Text.Trim,
"")
"new" If
运算符被短路,因此只执行 true 或 false 部分:
_JEBatchDate = If(textJEBatchDate.Text.Trim.Length > 0,
textJEBatchDate.Text.Trim,
"")