VB.Net到AccessDB的SQL - INSERT INTO参数错误

时间:2013-08-12 10:57:57

标签: sql vb.net ms-access

以下代码使用相同的参数,有一个update和一个insert语句。更新函数WORKS,Insert into语句没有...(在更新中,所有参数都在DB中成功设置)

我不会发布其余的连接字符串,因为这已经设置并正常工作。

我收到以下错误:条件表达式中的数据类型不匹配。

Dim UpdateCon As MasterConnection = New MasterConnection()
Dim myCommand As OleDb.OleDbCommand = UpdateCon.GetConnection().CreateCommand
myCommand.Parameters.Add(New OleDb.OleDbParameter("@Navn", BoxKundeNavn.Text)) 'text field'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@Hendelsesdato", DtpHendelsesdato.Value.ToString)) 'datetimepicker'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@Event", BoxTrojans.Text)) 'text field'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@Annet", BoxLogg.Text)) 'text field'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@EndretAv", Analyst.ToString)) 'string variable'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@EndretDato", Date.Now().ToString)) 'datetime picker'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@Kontaktet", contacted)) 'boolean'
myCommand.Parameters.Add(New OleDb.OleDbParameter("@BrukerID", BoxKundeID.Text)) 'text field'

If userExist = True Then
    Dim SqlText As String = "Update master Set Navn= @Navn, Hendelsesdato= @Hendelsesdato, Event= @Event," & _
                "Annet= @Annet, EndretAv= @EndretAv, EndretDato=@EndretDato, Kontaktet=@Kontaktet WHERE BrukerID= @BrukerID"
    myCommand.CommandText() = SqlText
Else
    intCheck = MsgBox("Du er nå i ferd med å legge til en ny unik kundeID i database, er dette riktig?", vbYesNo, "Ny kundeID")
    If intCheck = True Then
        Dim SqlText As String = "INSERT INTO master (Hendelsesdato, BrukerID, Navn, Event, Annet, Kontaktet, EndretDato, EndretAv) " & _
                    "VALUES (@Hendelsesdato, @BrukerID, @Navn, @Event, @Annet, @Kontaktet, @EndretDato, @EndretAv)"
        myCommand.CommandText() = SqlText

    Else
        Exit Sub
    End If
End If

Dim test As Integer
Try
    UpdateCon.GetConnection.Open()
    test = myCommand.ExecuteNonQuery()
    UpdateCon.GetConnection.Close()
Catch ex As OleDb.OleDbException
    MsgBox(ex.Message.ToString)
End Try

1 个答案:

答案 0 :(得分:2)

Access.OLEDB 忽略参数名称;参数必须以它们出现在命令文本中的完全顺序定义。由于您的两个命令使用相同的参数,因此您必须使用单独的代码块来定义每个参数。