更新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