OleDbCommand失败,"没有给出一个或多个必需参数的值"

时间:2018-01-21 14:25:21

标签: vb.net ado.net

我有错误:

  

未处理的类型' 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

帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您对参数使用@...语法。这是SqlDbCommand语法,不适用于您的OleDbCommandOleDbCommand参数use ? placeholders

.CommandText = "INSERT INTO NewData ([Nama], [Gaji], ...) VALUES (?, ?, ...)"

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

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