难道 SQLServer 的字段顺序有严格要求???(100)

  • 主题发起人 主题发起人 WebBar
  • 开始时间 开始时间
W

WebBar

Unregistered / Unconfirmed
GUEST, unregistred user!
一般情况下,数据表的字段顺序是没有关系的。可是我使用 CB2009/CB2010 , 以ADO 方式连接 SqlServer2005 时,经常发生数据类型不正确的报错信息。后来发现是这样的,假设数据表结构:field_1 integerfield_2 nvarchar(50)那么当我在 INSERT / UPDATE 时:INSERT INTO table_name(field_1, field_2)values(?, ?); -- 在程序中添加参数(1, "abc"), 执行成功INSERT INTO table_name(field_2, field_1)values(?, ?); -- 在程序中添加参数("abc", 1), 会报类型不正UPDATE 时也一样,总结下来,与数据表的字段顺序有关。这一点不太合理啊,请问有谁碰到过类似的现象吗?如何解决的呢?
 
测试了一下,没有这个问题呀
 
我的字段实际上很多,类型也很多,一开始也没发现,后来这个问题出来了。
 
肯定不会的,你跟踪一下看,肯定是有非法数据的原因。
 
当然跟踪,后来就是没有修改程序,改了一个SQLServer的表字段顺序就OK了,再试了改回来就又不行了。然后我第一次修改了数据表的设计,严格指定了每个字段的顺序,把这个问题规避掉了。后来跟踪时,发现ADO的参数类型(DataType),自动识别为 ftUnknown 。于是修改了设计,当 DataType 为 ftUnknown 时,按真实的数据类型再把 DataType 设置成正确的类型,程序就OK了。这个现象已经存在很久了,我的很多系统开发中,都碰到了这个问题。所以我也研究了很久,一直不得而知。所以找大家确认一下。不知道是否还有人碰到类似问题。
 
还是用参数吧sql:='INSERT INTO table_name(field_1, field_2) values(:p1,:p2)';adoquery1.sql.clear;adoquery1.sql.add(sql);adoquery1.parameters.parambyname('p1').value:=...adoquery1.parameters.parambyname('p2').value:=...
 
用的就是参数。
 
后退
顶部