Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这个查询有什么问题?I';m提供所有参数的值_Sql_Vb.net_Ms Access_Parameters - Fatal编程技术网

Sql 这个查询有什么问题?I';m提供所有参数的值

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

我有一个vb.net项目,在中有一个更新函数,我将通过save button click方法将值传递到数据库SQL函数中

在我正在更新的数据库表中,有10个字段。正如您在下面的查询中所看到的,我提供了10个值,每个字段一个

然而,当它点击行
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)今天恢复了精神:)当然,这是多么明显啊!我不敢相信我没有意识到,这里的其他人也没有意识到这一点。。。谢谢你,哈哈