通过 ODBC 数据连接使用 Int64 参数进行 TableAdapter 查询
在这种情况下,Visual Studio 设计器会生成一个将参数作为 int 的方法,即使相应的数据库列被指定为 System.Int64。
这是在“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 类型。
In this case, the Visual Studio designer generates a method which takes the parameter as an int, even though the corresponding database column is specified as System.Int64.
This is the query specified in the "TableAdapter Query Configuration Wizard":
SELECT *
FROM my_table
WHERE "status_id" = ?
Again, status_id is of type System.Int64. This is what the designer generates:
public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... }
Why isn't the parameter an Int64? Is this a bug in Visual Studio? (I'm using 2008 SP1.) I may end up just manually using the OdbcCommand class.
Edit: I'm using PostgreSQL, and the column is specified as type bigint.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,我明白了。 Visual Studio 应该足够聪明,可以将参数设置为 long (Int64),但手动设置的方法如下:
在 Visual Studio 数据集设计器中,选择“添加查询”向导生成的方法 - 例如,说“FillByStatusId,GetDataByStatusId(status_id)”。 在属性窗口中,找到“Parameters”行并选择“...”这将允许您手动将“DbType”设置为 Int64 (或其他),这解决了我的问题。
Okay, I figured it out. Visual Studio should have been smart enough to make the parameter a long (Int64), but here's how to set it manually:
In the Visual Studio Data Set Designer, select the method generated by the Add Query wizard--for instance, the item that says "FillByStatusId,GetDataByStatusId(status_id)". In the properties window, find the "Parameters" line and select the "..." This will allow you to set the "DbType" to Int64 (or whatever) manually, which fixed my problem.
数据库类型是否很长? 如果您在 MS Access 中有自动编号类型(相当于 long (int64)),则设计者将创建 int64...另外,您使用的是什么数据库?
编辑:使用 bigint 数据类型,您应该能够使用最多 9223372036854775807 的数字...而使用 int32,最多可以使用 2147483647。换句话说,您正在使用相当于 int64 的 PostgreSQL,它可以接受最多可达的任何 int 9223372036854775807。int32 可以工作,因为该数字在该范围内始终有效。 在 .Net 中,您可以在许多数字数据类型之间隐式转换。 例如,将 int 乘以 1.0,它将变成 double。 无需显式强制转换或转换。 但是,您无法在不丢失数据的情况下投射另一个方向。
Is the database type a long? The int64 will be created by the designer if you have an autonumber type in MS Access (which equates to a long (int64))... also, what database are you using?
Edit: With a bigint datatype, you should be able to use numbers up to 9223372036854775807... and with an int32, up to 2147483647. In other words, you are using the PostgreSQL equivalent of an int64, which can accept any int up to 9223372036854775807. An int32 works because the number will always be valid within that range. In .Net, you can implicitly convert between many of the number datatypes. For example, multiply an int by 1.0 and it will become a double. There is no need to explicitly cast or convert. You cannot, however, cast the other direction without dataloss.
已经过去很长时间了,但今天这个错误似乎仍然存在。 使用 MySql (Maria) DB,uint 数据类型被解释为 int,并且必须手动更改。
It's been a long time, but still today this error seems to persist. Using a MySql (Maria) DB, a uint datatype is interpreted as int, and has to be changed manually.