【发布时间】:2016-08-25 20:22:41
【问题描述】:
我的应用程序通过 comport 读取比例并执行一些逻辑。然后我希望它向 Access 数据库输出 6 个读数:
- 日期/时间时间两次
- 状态
- 层数
- 零件数
- 称重
我从网上提取了这段代码,声明dbInsert.ExcuteNonQuery ()得到错误
条件表达式中的数据类型不匹配
代码:
Dim dbInsert As New OleDb.OleDbCommand
Dim dbConnect As New OleDb.OleDbConnection
Dim Line As String = Environment.NewLine
Dim Status As String
Dim Stamp As Date
Dim pc As Double
Dim lc As Double
Sub AddToDb ()
Try
dbConnect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\aholiday\Desktop\Test\Test_be.accdb"
dbConnect.Open()
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Date_Stamp"
dbInsert.Parameters.Item("Date_Stamp").Value = Stamp
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Time_Stamp"
dbInsert.Parameters.Item("Time_Stamp").Value = Stamp
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Status"
dbInsert.Parameters.Item("Status").Value = Status
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Layer_Count"
dbInsert.Parameters.Item("Layer_Count").Value = lc
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Part_Count"
dbInsert.Parameters.Item("Part_Count").Value = pc
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Weight"
dbInsert.Parameters.Item("Weight").Value = WeightAConvert
Try
dbInsert.CommandText = "INSERT INTO Log VALUES (Stamp,Stamp, Status, lc, pc, WeightAConvert);"
dbInsert.CommandType = CommandType.Text
dbInsert.Connection = dbConnect
dbInsert.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
Me.Close()
End Try
End Sub
更新代码:
Try
Dim SQL = "INSERT INTO Scale_Log (Date_Stamp,Time_Stamp, Status, Layer_Count, Part_Count, Weight) VALUES (Stamp,Stamp,Status,lc,pc,WeightAConvert)"
Using dbCon As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\aholiday\Desktop\Test\Line_6&7_Weight_Log_be.accdb")
Using cmd As New OleDbCommand(SQL, dbCon)
cmd.Parameters.Add("Date_Stamp", OleDbType.Date).Value = Stamp
cmd.Parameters.Add("Time_Stamp", OleDbType.Date).Value = Stamp
cmd.Parameters.Add("Status", OleDbType.VarChar).Value = Status
cmd.Parameters.Add("Lay_Count", OleDbType.Double).Value = lc
cmd.Parameters.Add("Part_Count", OleDbType.Double).Value = pc
cmd.Parameters.Add("Weight", OleDbType.Double).Value = WeightAConvert
dbCon.Open()
Dim rows = cmd.ExecuteNonQuery()
cmd.Dispose()
End Using
dbCon.Close()
dbCon.Dispose()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
Exit Sub
End Try
【问题讨论】:
-
您的 SQL 没有将值映射到列。如果数据库不按该顺序返回列,您将尝试将一些东西放入 wring 列中。 SQL 应该包含参数,而不是与其他数据库提供程序有关的变量(
"Date_Stamp"而不是Stamp)。另外,打开 Option Strict -layerCount和其他一些没有在我们可以看到的代码中声明 -
@Plutonix 我并没有真正理解你的意思,你在说改变
dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName = "Date_Stamp" dbInsert.Parameters.Item("Date_Stamp").Value = Stamp中的内容,这是 2000 行代码的一个片段,LayerCount 在其他地方声明
标签: .net vb.net ms-access oledb