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
Vb.net OleDbCommand失败,并出现“错误”;没有给出一个或多个所需参数的值“;_Vb.net_Ado.net - Fatal编程技术网

Vb.net OleDbCommand失败,并出现“错误”;没有给出一个或多个所需参数的值“;

Vb.net OleDbCommand失败,并出现“错误”;没有给出一个或多个所需参数的值“;,vb.net,ado.net,Vb.net,Ado.net,我有一个错误: System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常 附加信息:没有为一个或多个必需参数提供值 这是我的消息来源: Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Using cn As New OleDb.OleDbConnection With { .ConnectionStrin

我有一个错误:

System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常

附加信息:没有为一个或多个必需参数提供值

这是我的消息来源:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Using cn As New OleDb.OleDbConnection With
{
     .ConnectionString = "provider = Microsoft.ace.oledb.12.0; Data source = Database10.accdb"
}

Using cmd As New OleDb.OleDbCommand With
{
      .Connection = cn,
      .CommandText = "INSERT INTO NewData ([Nama], [Gaji], [Lembur/jam], [Tunjangan], [Potongan]) VALUES (@Nama,@Gaji,@Lembur/jam,@Tunjangan,@Potongan)"
}
cmd.Parameters.AddRange(New OleDb.OleDbParameter() _
{
    New OleDb.OleDbParameter With {.ParameterName = "@Nama"},
    New OleDb.OleDbParameter With {.ParameterName = "@Gaji"},
    New OleDb.OleDbParameter With {.ParameterName = "@Lembur/jam"},
    New OleDb.OleDbParameter With {.ParameterName = "@Tunjangan"},
    New OleDb.OleDbParameter With {.ParameterName = "@Potongan"}
 }
 )

cmd.Parameters(0).Value = CStr(TextBox1.Text)
cmd.Parameters(1).Value = CStr(TextBox2.Text)
cmd.Parameters(2).Value = CStr(TextBox3.Text)
cmd.Parameters(2).Value = CStr(TextBox4.Text)
cmd.Parameters(2).Value = CStr(TextBox5.Text)
cn.Open()

Dim Affected = cmd.ExecuteNonQuery

cmd.Parameters.Clear()

If Affected > 0 Then
   TextBox1.Text = TextBox3.Text
   TextBox2.Text = ""
   TextBox3.Text = ""
End If
End Using
End Using
End Sub

请帮助我解决此问题。

您使用参数的
@…
语法。这是
SqlDbCommand
语法,不适用于您的
OleDbCommand
<代码>OLEDB命令参数:

在这种情况下,将忽略
ParameterName
属性



如果将来有人使用
SqlDbCommand
读取此命令:这也是不正确的SqlDbCommand代码:
/
在参数名称中无效。因此,SQL Server将
@Lembur/jam
读取为
@Lembur/jam
,即参数
@Lembur
除以(不存在)列
jam
。在这种情况下,解决方案是为参数使用不同的名称,例如
@Lemburjam
。请注意,参数的名称可以自由选择,不需要与插入的字段名称匹配。

cmd.parameters(n)中的经典复制/粘贴错误我已编辑到cmd.parameters(0)。Value=CStr(TextBox1.Text)cmd.parameters(1)。Value=CStr(TextBox2.Text)cmd.parameters(2)。Value=CStr(TextBox3.Text)cmd.Parameters(3).Value=CStr(TextBox4.Text)cmd.Parameters(4).Value=CStr(TextBox5.Text)但仍然存在错误“@Lembur/jam”为简单起见,可能将其改为“@Lemburjam”不是一个好的列名there@MarkSchultheiss谢谢,但现在有新的错误“其他信息:条件表达式中的数据类型不匹配。"请务必匹配<代码>、“Lybur/Cutter”、“<代码> >更改为<代码>、@ Lemburjam、,我们不能更改实际的列名,但我们可以稍稍减轻它,注意,如果您可以,我仍然会考虑将列名改为没有斜杠,这通常是一个坏主意。如果您阅读连接字符串,您将看到它不是SQL Server,它是MS ACCE。然而,我怀疑那里也存在同样的问题。@ZoharPeled:好的观点,
OleDbCommand
实际上使用了完全不同的参数语法。我已经修改了我的答案。
.CommandText = "INSERT INTO NewData ([Nama], [Gaji], ...) VALUES (?, ?, ...)"