0

我已经为此工作了好几天,任何帮助都会很棒。我正在尝试使用 VB.NET 和访问数据库将信息插入数据库。目前我有2个问题。第一个问题是我的数据库中有一个备注字段(响应),如果我尝试在该字段中插入超过 250 个字符,我会收到一个错误,提示我的条目太长。我遇到的另一个问题是,如果我在运行程序时尝试多次执行此代码,我会收到一条错误消息,提示“标准表达式中的数据类型不匹配......”。最后一个问题是我遇到的数据类型不匹配的问题。

这是有问题的代码

    con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\Backends\IncidentReport.mdb")
    con.Open()
    comStr = "INSERT INTO tblIncidentCommonItemsInfo(recid, Location, DescOrTypeInjIfOther, DateOf, TimeOf, TypeIncident, Doctor, " &
            "DateDocNotified, TimeDocNotified, DateRespPartyNotified, RespPartyNotified, " &
            " TimeRespPartyNotified, StateNotified, DateStateNotified, TimeStateNotified, Response) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" 

        cmd = New OleDbCommand(comStr, con)

        cmd.Parameters.AddWithValue("@p1", IDLabel.Text)
        cmd.Parameters.AddWithValue("@p2", LocTextBox.Text)
        cmd.Parameters.AddWithValue("@p3", DescTextBox.Text)
        cmd.Parameters.AddWithValue("@p4", DateOfTextBox.Text)
        cmd.Parameters.AddWithValue("@p5", TimeOfTextBox.Text)
        cmd.Parameters.AddWithValue("@p6", TypeTextBox.Text)
        cmd.Parameters.AddWithValue("@p7", DocComboBox.SelectedItem)
        cmd.Parameters.AddWithValue("@p8", DocDayDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p9", DocTimeDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p10", FamilyDayDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p11", RespPtyTextBox.Text)
        cmd.Parameters.AddWithValue("@p12", FamilyTimeDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p13", IDPHYesNoComboBox.SelectedItem)
        cmd.Parameters.AddWithValue("@p14", IDPHDayDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p15", IDPHTimeDateTimePicker.Value)
        cmd.Parameters.AddWithValue("@p16", ResidentWordsRichTextBox.Text)

        Try
            cmd.ExecuteNonQuery()
            MsgBox("Incident Saved")
        Catch ex As Exception
            MessageBox.Show(ex.Message & " - " & ex.Source)
        End Try
        SavedTextBox.Text = "Yes"
        con.Close()

任何帮助将不胜感激,谢谢。

4

1 回答 1

1

对于大小问题,您可以尝试准确指定您通过参数传递的值类型。我怀疑使用 AddWithValue 会使用更短的参数大小

cmd.Parameters.Add("@p16", OleDbType.LongVarWChar).Value = ResidentWordsRichTextBox.Text)

Data type mismatch in criteria expression错误可能是由相同的问题引起的。
AddWithValue 方法根据您传递的值的类型确定 Parameter DataType。

在您的代码中,您已经为看起来不同类型的字段传递了文本。例如recid似乎是一个整数(数字)字段,但 AddWithValue 使用一个 textbox.text 是一个字符串。您确实应该应用 aConvert.ToInt32(IDLabel.Text)并且应该对可能的 DateTime 字段进行相同的检查

于 2013-04-17T19:46:51.367 回答