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

Visual studio 通过ODBC数据连接使用Int64参数的TableAdapter查询,visual-studio,ado.net,odbc,tableadapter,Visual Studio,Ado.net,Odbc,Tableadapter,在本例中,Visual Studio设计器生成一个将参数作为int的方法,即使相应的数据库列被指定为System.Int64 这是“TableAdapter查询配置向导”中指定的查询: 同样,状态id的类型为System.Int64。这是设计器生成的内容: public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... } 为什么参数不是Int64?这是Visual Studio中的错误吗?(我使用的是200

在本例中,Visual Studio设计器生成一个将参数作为int的方法,即使相应的数据库列被指定为System.Int64

这是“TableAdapter查询配置向导”中指定的查询:

同样,状态id的类型为System.Int64。这是设计器生成的内容:

public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... }
为什么参数不是Int64?这是Visual Studio中的错误吗?(我使用的是2008 SP1。)我最终可能只是手动使用OdbcCommand类


编辑:我使用的是PostgreSQL,列被指定为bigint类型。

数据库类型是long吗?如果您在MS Access中具有自动编号类型(相当于长(int64)),则设计师将创建int64。。。另外,您使用的是什么数据库


编辑:对于bigint数据类型,您应该能够使用最多9223372036854775807的数字。。。和一个int32,高达2147483647。换句话说,您使用的是与int64相当的PostgreSQL,它最多可以接受9223372036854775807的任何整数。int32之所以有效,是因为该数字在该范围内始终有效。在.Net中,可以在许多数字数据类型之间进行隐式转换。例如,将一个int乘以1.0,它将变成一个double。不需要显式强制转换或转换。但是,如果没有数据丢失,你就不能向另一个方向投射。

好的,我知道了。Visual Studio应该足够聪明,可以将参数设置为long(Int64),但下面介绍如何手动设置它:


在VisualStudio数据集设计器中,选择由添加查询向导生成的方法——例如,显示“FillByStatusId,GetDatayStatusID(status_id)”的项。在properties窗口中,找到“Parameters”行并选择“…”,这将允许您手动将“DbType”设置为Int64(或其他),从而解决了我的问题

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

我使用的是PostgreSQL,数据类型为bigint。我知道int32是有效的(因为int32到int64转换总是像你说的那样有效),但我仍然需要使用int64作为参数。VisualStudio应该将其设置为int64。但我找到了改变的办法。
public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... }