Npgsql查询中的数据类型问题

时间:2011-04-29 16:49:37

标签: c# postgresql npgsql

我正在尝试在带有日期列的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。试着把单引号括起来,但它也失败了。

数据库列类型为date。

之前有人这样做过吗?有什么想法吗?

我检查了这个link搜索和aswer,但它没有帮助。 感谢

3 个答案:

答案 0 :(得分:1)

我注意到的第一件事是,当你添加参数时,它缺少" @"从一开始,您的命令使用" @"引用该值。

你确定参数[2]是你的" fecha"参数β

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  1. 尝试使用:
  2. npgsqlCommand.Parameters.Add("fecha", NpgsqlDbType.Date).Value = DateTime.Now;

    更易读的代码。

    1. obj.date的类型是DateTime struct?

    2. 添加到连接字符串参数Convert Infinity DateTime 有关详情,请查看:http://www.npgsql.org/doc/connection-string-parameters.html