2
我的应用程序通过comport读取比例,并执行一些逻辑。然后,我希望它输出6个读数到Access数据库:将数据添加到Access表
- 日期/时间时间的两倍
- 状态
- 层数
- 零件数
- 秤的重量
我从网上拉代码并且声明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不会执行任何操作来将值映射到col UMNS。如果数据库不按照这个顺序返回列,那么你会试图将一些东西放入绞线列。 SQL应该包含参数,而不是与其他数据库提供者有关的变量(“Date_Stamp”而不是“Stamp”)。另外,打开Option Strict - 'layerCount'和其他一些没有在代码中声明的我们可以看到 – Plutonix
@Plutonix我没有真正明白你的意思,你说'dbInsert.Parameters.Add(dbInsert.CreateParameter).ParameterName =“Date_Stamp”dbInsert.Parameters.Item(“Date_Stamp”)。Value = Stamp',这是2000行代码片断,LayerCount被声明为else – holi4683