【问题标题】:TableAdapter query with an Int64 parameter over an ODBC data connection通过 ODBC 数据连接使用 Int64 参数的 TableAdapter 查询
【发布时间】:2009-06-29 23:40:17
【问题描述】:

在这种情况下,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 类型。

【问题讨论】:

    标签: visual-studio ado.net odbc tableadapter


    【解决方案1】:

    好的,我想通了。 Visual Studio 应该足够聪明,可以将参数设置为 long (Int64),但这里是手动设置的方法:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我使用的是 PostgreSQL,数据类型为 bigint。
      • 好吧,我知道 int32 有效(因为 int32 到 int64 的转换总是有效的,就像你说的那样),但我仍然需要使用 int64 作为参数。 Visual Studio 应该将其设为 int64。但我想出了如何改变它。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        相关资源
        最近更新 更多