以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  Sql Command之inser语句Bug  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174586)

--  作者:lgzhao
--  发布时间:2022/1/22 4:12:00
--  Sql Command之inser语句Bug
我的程序用了很久了都ok。
之前一直没问题,最近更改了数据库事务执行代码,从connection.begintransaction 改成最新的cmd.begintransaction。
***********************************************************
正常操作过程如下代码,这样无论如何都是正确结果。

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内部的问题。请核查。



--  作者:有点蓝
--  发布时间:2022/1/22 15:29:00
--  
access和SqlServer我测试都没有问题。请上传实例说明。

是不是这个列在数据库里设置为不允许为空?

--  作者:lgzhao
--  发布时间:2022/1/23 10:54:00
--  
列数据都允许为空。