通过ODBC数据连接使用Int64参数的TableAdapter查询

时间:2009-06-29 23:40:18

标签: visual-studio ado.net odbc tableadapter

在这种情况下,即使相应的数据库列指定为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类型。

3 个答案:

答案 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,并且必须手动进行更改。