【发布时间】:2016-07-15 16:01:04
【问题描述】:
我正在尝试在 C# 中使用 ODbc 对 DB2 查询使用参数,但 Timestamp 字段给我带来了问题。我正在使用 DB2 Client 9.7 并且 updateDate 是 DateTime 类型。这是我的代码:
string commandString = "INSERT INTO DATABASENAME(USERNAME, UPDATE_DATE) VALUES ('?', TIMESTAMP_FORMAT('?', 'YYYY-MM-DD HH24:MI:SS'))";
OdbcConnection con = new OdbcConnection(conString);
OdbcCommand command = new OdbcCommand(commandString, con);
command.Parameters.AddWithValue("?username", userName);
command.Parameters.AddWithValue("?update_date", updateDate.ToString("yyyy-MM-dd HH:mm:ss"));
//execute the stuff
con.Open();
command.ExecuteNonQuery();
con.Close();
这是我收到的错误:
ERROR [42815] [IBM][CLI Driver][DB2] SQL0171N The data type, length or value of the argument for the parameter in position "1" of routine "SYSIBM.TIMESTAMP_FORMAT" is incorrect. Parameter name: "". SQLSTATE=42815
我还尝试使用 DB2 中包含的常规 TIMESTAMP() 函数,使用它接受的两种格式(例如 TIMESTAMP ('2016-10-20-12.00.00.000000') TIMESTAMP ('2016-10-20 12:00:00')),但这给了我这个错误:
ERROR [22007] [IBM][CLI Driver][DB2] SQL0180N The syntax of the string representation of a datetime value is incorrect. SQLSTATE=22007
有人知道我哪里出错了吗?
编辑:不用参数也可以,DB2不能用参数吗?
【问题讨论】:
-
您将
updateDate(一个 DateTime)转换为 C# 代码中的字符串,然后尝试将其转换回 SQL 语句中的时间戳。为什么不将参数作为 DateTime 提供? -
@mustaccio 把我的参数改成这样? command.Parameters.AddWithValue("?update_date", updateDate);当我尝试这样做时,我收到“检测到无效的日期时间格式,指定了无效的字符串表示”的错误。在我的命令字符串中,我还将 updateDate 更改为常规参数而不是字符串?与“?”无论如何都没有运气。