Sql 这个查询有什么问题?I';m提供所有参数的值
我有一个vb.net项目,在中有一个更新函数,我将通过save button click方法将值传递到数据库SQL函数中 在我正在更新的数据库表中,有10个字段。正如您在下面的查询中所看到的,我提供了10个值,每个字段一个 然而,当它点击行Sql 这个查询有什么问题?I';m提供所有参数的值,sql,vb.net,ms-access,parameters,Sql,Vb.net,Ms Access,Parameters,我有一个vb.net项目,在中有一个更新函数,我将通过save button click方法将值传递到数据库SQL函数中 在我正在更新的数据库表中,有10个字段。正如您在下面的查询中所看到的,我提供了10个值,每个字段一个 然而,当它点击行Dc.ExecuteNonQuery()时,它仍然输出错误 没有为一个或多个必需参数提供值 我搞不懂为什么——其他人可以吗 公共共享函数UpdateFreight(ByVal OrderNumber为整数_ ByVal OrderRef作为字符串_ ByVal
Dc.ExecuteNonQuery()
时,它仍然输出错误
没有为一个或多个必需参数提供值
我搞不懂为什么——其他人可以吗
公共共享函数UpdateFreight(ByVal OrderNumber为整数_
ByVal OrderRef作为字符串_
ByVal FreightNum作为整数_
ByVal运费VAL为双倍_
ByVal FreightDesc作为字符串_
ByVal ProductCode作为字符串_
ByVal EstDelivery作为日期时间_
ByVal SCode作为字符串_
ByVal CCode作为字符串_
ByVal AddressCode作为字符串,\u
con作为OLEDB连接)
尝试
Dim Dc作为新的OLEDB命令
直流连接=con
Dc=新OleDb.OleDbCommand(“更新[订单运费]设置[订单编号]=?”_
[订单参考]=_
[运费价格]=?,[运费价格]=_
[运费描述]=?,[产品代码]=_
[Est_交货]=?,[Supplier_代码]=_
[客户代码]=?,[地址代码]=_
其中[OrderNumber]=?”,con)
Dc.Parameters.AddWithValue(“@ono”,OrderNumber)
Dc.Parameters.AddWithValue(“@oref”,OrderRef)
Dc.Parameters.AddWithValue(“@fnum”,FreightNum)
Dc.Parameters.AddWithValue(“@fval”,FreightVal)
Dc.Parameters.AddWithValue(“@fdesc”,FreightDesc)
Dc.Parameters.AddWithValue(“@pcode”,ProductCode)
Dc.Parameters.AddWithValue(“@estd”,EstDelivery)
Dc.Parameters.AddWithValue(“@scode”,scode)
Dc.Parameters.AddWithValue(“@ccode”,ccode)
Dc.Parameters.AddWithValue(“@acode”,AddressCode)
Dc.Parameters.AddWithValue(“@onum”,订单号)
Dc.ExecuteNonQuery()
特例
错误日志(ex)
MsgBox(“更新数据失败,请参阅错误日志”)
扔
结束尝试
端函数
如果有帮助的话,这就是调用函数的地方
database.UpdateFreight(OrderNumber、OrderRef、FNum、FreightVal、FreightDesc、PCode、EstDate、SCode、custCode、Address、con)
并澄清所有参数均为给定值
(另外,这与代码格式无关,我对格式做了很多调整,只是为了问题的可读性,在vb中看起来不是这样的)因为
OleDb
不支持命名参数,并且查看文档中的OleDbCommand.parameters
,如果您将参数作为OleDbParameter
对象传入,它是否可以工作?比如说-
Dc = New OleDb.OleDbCommand("UPDATE [Order_Freight] SET [Order_Number] = ?, _
[Order_Reference] = ?, _
[Freight_Number] = ?, [Freight_Val] = ?, _
[Freight_Desc] = ?, [Product_Code] = ?,_
[Est_Delivery] = ?, [Supplier_Code] = ?, _
[Customer_Code] = ?, [Address_Code] = ? _
WHERE [OrderNumber] = ?", con)
Dc.Parameters.Add(New OleDbParameter("@ono", OrderNumber))
Dc.Parameters.Add(New OleDbParameter("@oref", OrderRef))
Dc.Parameters.Add(New OleDbParameter("@fnum", FreightNum))
Dc.Parameters.Add(New OleDbParameter("@fval", FreightVal))
Dc.Parameters.Add(New OleDbParameter("@fdesc", FreightDesc))
Dc.Parameters.Add(New OleDbParameter("@pcode", ProductCode))
Dc.Parameters.Add(New OleDbParameter("@estd", EstDelivery))
Dc.Parameters.Add(New OleDbParameter("@scode", SCode))
Dc.Parameters.Add(New OleDbParameter("@ccode", CCode))
Dc.Parameters.Add(New OleDbParameter("@acode", AddressCode))
Dc.Parameters.Add(New OleDbParameter("@onum", OrderNumber))
Dc.ExecuteNonQuery()
我认为问题是因为你有一个列的名字错了
UPDATE [Order_Freight] SET [Order_Number] = ?,
[Order_Reference] = ?,
[Freight_Number] = ?, [Freight_Val] = ?,
[Freight_Desc] = ?, [Product_Code] = ?,
[Est_Delivery] = ?, [Supplier_Code] = ?,
[Customer_Code] = ?, [Address_Code] = ?
WHERE [OrderNumber] = ?
注意
设置[订单号]=?
和其中[订单号]=?
。其中一个可能不正确,被解释为未知列,因此Access将其视为参数。将订单号列的拼写改为正确。在调试时,在调用ExecuteOnQuery查看所有参数的值之前,是否可以打开Dc.Parameters
?有人失踪吗?您的sql语句是否不需要命名参数?“set[Order_Number]=:ono”(或任何正确的访问语法)?查看了我们的代码库之后,您似乎将它们添加到参数CollectionNow the@中,然后在sql中用冒号指定它们。@AndrewMortimer根据,“当CommandType设置为Text时,OLE DB.NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。”set[Order_Number]…其中[OrderNumber]
我看不到表映像中的第二列。对于单个表,配置的DataAdapter将为您处理所有这些-无需“帮助器”“你能在只更新一个字段的情况下尝试更新,看看是否有效吗?如果是这样的话,继续添加直到它断开。否则,我认为更新有一些根本性的问题。嗨,谢谢你的建议,这仍然给了我同样的问题,但是你应该被授予“鹰眼”徽章。:)@安德烈·赫赫(Andre hehe)今天恢复了精神:)当然,这是多么明显啊!我不敢相信我没有意识到,这里的其他人也没有意识到这一点。。。谢谢你,哈哈