【问题标题】:Problems with Data type in Npgsql queryNpgsql 查询中的数据类型问题
【发布时间】:2011-04-29 16:49:36
【问题描述】:

我正在尝试在 PostgreSQL 表中插入一行,其中包含日期列。在 UI 上,我有一个 DateTimePicker,用户可以在其中选择正确的日期。到目前为止,我得到了这个:

在用户界面上:

objPresupuesto.date = this.dtpFechaPres.Value.ToString("yyyy-MM-dd");

关于插入行的方法:

NpgsqlCommand query = new NpgsqlCommand("insert into presupuesto(presupuesto, codigo, descripcion, fecha, cliente, proyecto, total) values(nextval('presupuesto_presupuesto_seq'), @codigo, @descripcion, @fecha, @cliente, @proyecto,  @total);Select lastval();", conn);            
...
query.Parameters.Add(new NpgsqlParameter("fecha", NpgsqlDbType.Date, 0, "fecha"));
...
query.Parameters[2].Value = obj.date.toString;//without the toString it also fails

它抛出这个异常:

Specified cast is not valid.

obj.date 的值为 2011-04-29。尝试在周围加上单引号,但它也失败了。

数据库列类型为日期。

以前有人做过吗?有什么想法吗?

我检查了这个link 搜索并回答,但它没有帮助。 谢谢

【问题讨论】:

  • Hmmmmmm,你能给我一个简单的测试用例吗?您是否尝试过使用 NpgsqlDate 对象?
  • @FranciscoJunior 我尝试使用 NpgsqlDate 并且它可以工作,但它有点棘手,我不知道是否有直接的方法可以做到这一点。非常感谢。
  • 是的,我也认为它可以更直接。你能给我提供一个简单的基于控制台的测试应用程序,以便我看一下吗?另外,如果可能,请在以下位置填写一份错误报告:bugs.npgsql.org 谢谢

标签: c# postgresql npgsql


【解决方案1】:

我注意到的第一件事是,当您添加参数时,从命令引用带有“@”的值的开头就缺少“@”。

您确定 Parameters[2] 是您的“fecha”参数吗?

【讨论】:

    【解决方案2】:
    1. 尝试使用:

    npgsqlCommand.Parameters.Add("fecha", NpgsqlDbType.Date).Value = DateTime.Now;

    为了更易读的代码。

    1. obj.date 的类型是 DateTime 结构吗?

    2. 添加到连接字符串参数Convert Infinity DateTime 更多信息请查看:http://www.npgsql.org/doc/connection-string-parameters.html

    【讨论】:

      【解决方案3】:

      query.Parameters[2].Value = CDate(obj.date)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 2011-11-04
        相关资源
        最近更新 更多