Dim cmd As New SQLCommand
cmd.ConnectionName = _ConnectionName
cmd.CommandText = "ins**ert into {GLedger_InventoryTrans} (Date,PeriodCode,TranscType,TranscNo,StockID,UnitCost) " & _
" values(?,?,?,?,?,?) "
cmd.Parameters.Clear
cmd.Parameters.Add("@Date", format(Date.Today, "yyyy-MM-dd"))
cmd.Parameters.Add("@PeriodCode", 202202)
cmd.Parameters.Add("@TranscType", "test")
cmd.Parameters.Add("@TranscNo", "TEst01")
cmd.Parameters.Add("@StockID", "TEst")
cmd.Parameters.Add("@UnitCost", system.dbnull.value)
cmd.Execute**NonQuery
**************************************
上面代码直接执行永远是正确的,unitcost列是双精度类型。
****************************************************
但如果在下面代码中,就会出问题。大概过程(代码拼写随便打字别当真)
Dim cmd As New SQLCommand
cmd.ConnectionName = _ConnectionName
cmd.begintransaction ---
cmd.text = " sdfvsdfadsdsfsdffdsdf dsfdfdf "
dim tbx as datatable =cmd.exex uratereader(true)
dim nr as datarow =tbx.addnew
...
tbx.save
cmd.CommandText = "ins**ert into {GLedger_InventoryTrans} (Date,PeriodCode,TranscType,TranscNo,StockID,UnitCost) " & _
" values(?,?,?,?,?,?) "
cmd.Parameters.Clear
cmd.Parameters.Add("@Date", format(Date.Today, "yyyy-MM-dd"))
cmd.Parameters.Add("@PeriodCode", 202202)
cmd.Parameters.Add("@TranscType", "test")
cmd.Parameters.Add("@TranscNo", "TEst01")
cmd.Parameters.Add("@StockID", "TEst")
cmd.Parameters.Add("@UnitCost", system.dbnull.value)
cmd.Execute**NonQuery
cm.commit
引起错误的代码是cmd.Parameters.Add("@UnitCost", system.dbnull.value) ,报错信息是 Parameter[一个数字], the oleDbType property is uninitialized: oleDbtype.empty
居然不允许空值插入。
第二段代码的bug,估计是由于cmd第一步生成了一个datatable或者是来自于事务。总之应该是foxtable内部的问题。请核查。