Foxtable(狐表)用户栏目专家坐堂 → Sql Command之inser语句Bug


  共有3770人关注过本帖树形打印复制链接

主题:Sql Command之inser语句Bug

帅哥哟,离线,有人找我吗?
lgzhao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2085 威望:0 精华:0 注册:2017/11/19 9:46:00
Sql Command之inser语句Bug  发帖心情 Post By:2022/1/22 4:12:00 [只看该作者]

我的程序用了很久了都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内部的问题。请核查。



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109505 积分:557193 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/1/22 15:29:00 [只看该作者]

access和SqlServer我测试都没有问题。请上传实例说明。

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

 回到顶部
帅哥哟,离线,有人找我吗?
lgzhao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2085 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2022/1/23 10:54:00 [只看该作者]

列数据都允许为空。

 回到顶部