我有错误:
未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll
中附加信息:没有给出一个或多个必需参数的值。
这是我的来源:
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
帮我解决这个问题。
答案 0 :(得分:0)
您对参数使用@...
语法。这是SqlDbCommand
语法,不适用于您的OleDbCommand
。 OleDbCommand
参数use ?
placeholders:
.CommandText = "INSERT INTO NewData ([Nama], [Gaji], ...) VALUES (?, ?, ...)"
在这种情况下,ParameterName
属性将被忽略。
如果以后有人使用SqlDbCommand
读取此内容:这也是错误的SqlDbCommmand代码:/
在参数名称中无效。因此,SQL Server将@Lembur/jam
读为@Lembur / jam
,即参数@Lembur
除以(不存在)列jam
。在这种情况下,解决方案是为参数使用不同的名称,例如@Lemburjam
。请注意,参数的名称可以自由选择,不需要与要插入的字段的名称相匹配。