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

问题描述 投票:1回答:3

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

visual-studio ado.net odbc tableadapter
3个回答
2
投票

好的,我知道了。 Visual Studio应该足够聪明,可以将参数设置为长(Int64),但是下面是手动设置参数的方法:

[在Visual Studio数据集设计器中,选择“添加查询”向导生成的方法-例如,显示“ FillByStatusId,GetDataByStatusId(status_id)”的项目。在属性窗口中,找到“参数”行,然后选择“ ...”,这将允许您手动将“ DbType”设置为Int64(或其他任何值),从而解决了我的问题。


0
投票

数据库类型是否很长?如果您在MS Access中具有自动编号类型(相当于long(int64)),则设计者将创建int64。此外,您使用的是哪个数据库?

编辑:使用bigint数据类型,您应该能够使用最大为9223372036854754775807 ...的数字,并且使用int32,最大为2147483647。换句话说,您正在使用与int64等效的PostgreSQL,它可以接受任何int最多为9223372036854754775807。int32可以工作,因为该数字在该范围内始终有效。在.Net中,您可以在许多number数据类型之间进行隐式转换。例如,将一个int乘以1.0,它将变成一个双精度。无需显式转换或转换。但是,您不能在没有数据丢失的情况下投向另一个方向。


0
投票

已经很长时间了,但是直到今天,这个错误似乎仍然存在。使用MySql(Maria)DB,uint数据类型被解释为int,必须手动更改。

© www.soinside.com 2019 - 2024. All rights reserved.