Npgsql 查询中的数据类型问题
我正在尝试在 PostgreSQL 表中插入一行,其中包含日期列。在用户界面上,我有一个 DateTimePicker,用户可以在其中选择正确的日期。到目前为止,我得到了这个:
在 UI 上:
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。尝试添加单引号,但也失败了。
数据库列类型为日期。
以前有人这样做过吗?有什么想法吗?
我检查了这个链接搜索并询问,但没有帮助。 谢谢
I'm trying to insert a row in a PostgreSQL table with a date column. On the UI, I got a DateTimePicker where the user selectes the proper date. So far I got this:
On the UI:
objPresupuesto.date = this.dtpFechaPres.Value.ToString("yyyy-MM-dd");
On the method who inserts the row:
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
It throws this exception:
Specified cast is not valid.
The obj.date value is 2011-04-29. tryied putting single quotes around, but It also fails.
The database column type is date.
Anyone has done this before? Any ideas?
I checked this link searching for and aswer but it doesn't helped.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我注意到的第一件事是,当您添加参数时,它从一开始就缺少“@”,您的命令用“@”引用值。
您确定参数[2]是您的“fecha”参数吗?
The first thing I noticed is that when you are adding your parameter it is missing the "@" from the beginning where your command references the value with the "@".
Are you sure that the Parameters[2] is your "fecha" parameter?
npgsqlCommand.Parameters.Add("fecha", NpgsqlDbType.Date).Value = DateTime.Now;
以获得更具可读性的代码。
obj.date
的类型是 DateTime 结构体?添加到连接字符串参数
转换无限日期时间
有关更多信息,请检查: http://www.npgsql.org/doc/connection -string-parameters.html
npgsqlCommand.Parameters.Add("fecha", NpgsqlDbType.Date).Value = DateTime.Now;
For more readable code.
Type of
obj.date
is DateTime struct?Add to connection string parameter
Convert Infinity DateTime
For more info check: http://www.npgsql.org/doc/connection-string-parameters.html
query.Parameters[2].Value = CDate(obj.date)
query.Parameters[2].Value = CDate(obj.date)