在这种情况下,即使相应的数据库列指定为System.Int64,Visual Studio设计器也会生成一个将参数作为int的方法。
这是“TableAdapter查询配置向导”中指定的查询:
SELECT *
FROM my_table
WHERE "status_id" = ?
同样,status_id的类型为System.Int64。这就是设计师所生成的:
public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... }
为什么参数不是Int64?这是Visual Studio中的错误吗? (我使用的是2008 SP1。)我最终可能只是手动使用OdbcCommand类。
编辑:我正在使用PostgreSQL,并且该列被指定为bigint类型。
答案 0 :(得分:2)
好的,我明白了。 Visual Studio应该足够聪明,使参数变长(Int64),但这里是如何手动设置它:
在Visual Studio数据集设计器中,选择“添加查询”向导生成的方法 - 例如,显示“FillByStatusId,GetDataByStatusId(status_id)”的项目。在属性窗口中,找到“参数”行并选择“...”这将允许您手动将“DbType”设置为Int64(或其他),这解决了我的问题。
答案 1 :(得分:0)
数据库类型是长吗?如果你在MS Access中有一个自动编号类型(相当于一个long(int64)),那么int64将由设计者创建...还有你使用的是什么数据库?
编辑:使用bigint数据类型,您应该能够使用最大为9223372036854775807的数字...并使用int32,最高为2147483647.换句话说,您使用的是PostgreSQL等效的int64,它可以接受任何int最高为9223372036854775807. int32有效,因为该数字在该范围内始终有效。在.Net中,您可以隐式地在许多数字数据类型之间进行转换。例如,将int乘以1.0,它将变为double。无需显式转换或转换。但是,如果没有dataloss,你就不能抛弃另一个方向。
答案 2 :(得分:0)
已经很长时间了,但是直到今天,这个错误似乎仍然存在。使用MySql(Maria)DB,uint数据类型将被解释为int,并且必须手动进行更改。