Vb.net 运行OleDb错误80040E10:参数?\u 2没有默认值

Vb.net 运行OleDb错误80040E10:参数?\u 2没有默认值,vb.net,oledb,oledbconnection,Vb.net,Oledb,Oledbconnection,a、 b、c是字符串,它们都在using块中。我在标题中得到错误:参数?\u 2没有默认值。有人知道这是什么意思吗?我已经为所处理的变量添加了默认值,但仍然没有更改。我错过什么了吗 dbc.open() Dim trans As OleDbTransaction = dbc.BeginTransaction(IsolationLevel.ReadCommitted) Dim cmd As new OleDbCommand("INSERT INTO " & a & " (x, y)

a、 b、c是字符串,它们都在using块中。我在标题中得到错误:参数?\u 2没有默认值。有人知道这是什么意思吗?我已经为所处理的变量添加了默认值,但仍然没有更改。我错过什么了吗

dbc.open()
Dim trans As OleDbTransaction = dbc.BeginTransaction(IsolationLevel.ReadCommitted)
Dim cmd As new OleDbCommand("INSERT INTO " & a & " (x, y) VALUES (?, ?)", dbc, trans)
cmd.parameters.add(New OleDbParameter("x", b)
cmd.parameters.add(New OleDbParameter("y", c)
cmd.ExecuteNonQuery()
trans.commit()
dbc.close()
更新:我尝试使用上面提到的语法:

cmd.parameters.AddWithValue("y", c)

到目前为止,一切都不起作用。添加的if(c,DBNull.Value)似乎只是将值设置为null。我知道我输入的不是空的

更新:

那个?订单没有按表面上的顺序排列。我在查询中有一个WHERE语句,我把它放在一开始就认为OleDbParameter字符串实际上引用了一些合理的东西,比如实际指向对象。为什么

OLEDB参数(“x”,b)


如果x实际上不是指b,那么顺序才是最重要的?无论如何,感谢大家提供了出色且快速的响应。

c的(字符串)值是空的还是空的?b&c类型是什么?尝试改用
cmd.Parameters.AddWithValue(…)
。如果
a
中有空格,则应在表名周围加上[括号]。c值可以为空。我没有使用DBNull将其作为一个选项进行分隔,我可以尝试一下。我也会尝试AddWithValue(…)。
cmd.parameters.AddWithValue("y", if(c, DBNull.Value))