【发布时间】:2016-08-03 14:51:49
【问题描述】:
我的程序中有以下 INSERT 查询(变量从 Access 数据库中分配了一个值,并被插入到新的 SQL Server 数据库中)。代码运行良好,Parameters.Add 部分中的值都是它们应该的值,但是当它到达sql.ExecuteNonQuery() 行时,我得到了错误
转换规范的字符值无效。 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
For Each dr As DataRow In getDataTable(sqlct, importsCon, Nothing).Rows
Dim conID As Integer
Dim custacc As String
Dim datestart As Object
Dim daterenew As Object
Dim fee As Double
Dim agree As String
Dim details As String
Dim datesent As Object
Dim timesent As Object
Dim remname As String
Dim remmail As String
conID = dr("ContractID")
custacc = dbToString(dr("CustAcc"))
datestart = dbToDate(dr("DateStart"))
daterenew = dbToDate(dr("DateRenew"))
fee = dr("Fee")
agree = dbToString(dr("Agreement"))
details = dbToString(dr("OtherDetails"))
datesent = dbToDate(dr("DateSent"))
timesent = dbToTime(dr("TimeSent"))
remname = dbToString(dr("ReminderName"))
remmail = dbToString(dr("ReminderEmail"))
sql.CommandText = "INSERT INTO tblContracts(ContractID, CustAcc, DateStart, DateRenew, Fee, Agreement, OtherDetails, DateSent, TimeSent, ReminderName, ReminderEmail) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
sql.Transaction = tr
sql.Parameters.Clear()
sql.Parameters.Add("@ContractID", OleDbType.Integer).Value = conID
sql.Parameters.Add("@CustAcc", OleDbType.VarChar).Value = custacc
sql.Parameters.Add("@DateStart", OleDbType.DBDate).Value = datestart
sql.Parameters.Add("@DateRenew", OleDbType.DBDate).Value = daterenew
sql.Parameters.Add("@Fee", OleDbType.Double).Value = fee
sql.Parameters.Add("@Agreement", OleDbType.VarChar).Value = agree
sql.Parameters.Add("@OtherDetails", OleDbType.VarChar).Value = details
sql.Parameters.Add("@DateSent", OleDbType.DBDate).Value = datesent
sql.Parameters.Add("@TimeSent", OleDbType.DBDate).Value = timesent
sql.Parameters.Add("@ReminderName", OleDbType.VarChar).Value = remname
sql.Parameters.Add("@ReminderEmail", OleDbType.VarChar).Value = remmail
sql.ExecuteNonQuery()
sql.Parameters.Clear()
Next
我的代码有什么问题?所有数据类型都与数据库的数据类型匹配(对象是数据库中的日期时间,但它们最初是对象,因为它们首先通过另一个函数)
【问题讨论】:
-
@GordThompson 我将所有的
OleDbType.VarChar更改为OleDbType.VarWChar,出现同样的错误信息 -
在 INSERT 查询中,首先执行
sql.CommandText = "INSERT INTO tblContracts(ContractID) VALUES(?),然后注释除 conID 之外的所有参数行。测试程序。如果可行,请在 (CustAcc) 中添加另一个,然后重复该过程,直到找到破坏它的那个,以帮助缩小问题范围 -
@David 谢谢,所以错误是
sql.Parameters.Add("@DateSent", OleDbType.DBDate).Value = datesent -
好的,很好,所以你知道它所在的行...告诉我,查询试图插入导致错误的值是什么?
-
@David 值是 12:00:00 AM,它被转换成这个是因为它在数据库中是一个空值
标签: vb.net sql-server-2008 tsql ms-access insert