Vb.net OleDbCommand失败,并出现“错误”;没有给出一个或多个所需参数的值“;
我有一个错误: System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常 附加信息:没有为一个或多个必需参数提供值 这是我的消息来源: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
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 (?, ?, ...)"