VB.NET数据类型不匹配,数据输入很长

时间:2013-04-17 19:36:15

标签: database vb.net ms-access visual-studio-2012 oledb

我已经做了好几天了,任何帮助都会很棒。我试图使用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()

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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