【问题标题】:VB.NET Data type mismatch, and data entry is to longVB.NET 数据类型不匹配,数据输入过长
【发布时间】:2013-04-17 19:36:15
【问题描述】:

我已经为此工作了几天,任何帮助都会很棒。我正在尝试使用 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()

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

【问题讨论】:

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


    【解决方案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 字段进行相同的检查

    【讨论】:

    • 我仍然收到此错误:该字段太小,无法接受您尝试添加的数据量。尝试插入或粘贴更少的数据。
    • 无法重现该问题。它按预期工作。如果这不是问题,您可以将带有示例表的数据库发送给我,我将尝试在您的架构上进行测试
    • 你能不能重现这两个问题或者只是不匹配问题
    • 我只尝试过尺寸问题。将 Access 2003 与 Jet.4.0 和 ACE.12.0 用于 Access2010。但备忘录字段正确地接收从 140K 的文件加载的数据而没有大惊小怪。 (64位win7)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多