VB.NET 数据类型不匹配,数据输入过长
Posted
技术标签:
【中文标题】VB.NET 数据类型不匹配,数据输入过长【英文标题】:VB.NET Data type mismatch, and data entry is to long 【发布时间】: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()
任何帮助将不胜感激,谢谢。
【问题讨论】:
【参考方案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)以上是关于VB.NET 数据类型不匹配,数据输入过长的主要内容,如果未能解决你的问题,请参考以下文章
在 MS Access 中保存来自 VB.Net Windows 窗体的数据时出现错误 System.Data.OleDb.OleDbException:“标准表达式中的数据类型不匹配”。