从vb.net String转换为DB2 Timestamp

时间:2013-02-14 13:35:55

标签: vb.net db2

我现在真的很沮丧,因为我无法设法将VB.NET手动创建的DATE数据类型转换为具有TIMESTAMP数据类型的DB2列。

我尝试了几种不同的方法来处理这个,但无论我做什么,我总是得到错误“SQL0180N:日期时间值的字符串表示的语法不正确”。

我的应用程序中处理从String到DATE的转换的部分就在这里:

Dim neuesDatum As Date
neuesDatum = CDate(jahr & "-" & "0" & monat & "-01 00:00:00")

转换的字符串如下所示:2013-01-01 00:00:00

我也尝试了日期格式的日期(01.01.203),尝试使用没有最后一部分的字符串(00:00:00),但无论我做什么,它总是以同样的方式结束。 / p>

我使用存储过程将数据插入表中。日期作为参数“SollMonat”提供。

CREATE OR REPLACE PROCEDURE "ADDON21C"."STP_BEITRAGSSATZ_ADD"
(
        IN @Id BIGINT,
        IN @Typ VARCHAR(100),
        **IN @SollMonat TIMESTAMP,**
        IN @G VARCHAR(100),
        IN @F VARCHAR(100),
        IN @H VARCHAR(100),
        IN @U1 VARCHAR(100),
        IN @U2 VARCHAR(100),
        IN @U1erhoeht VARCHAR(100),
        IN @U1ermaessigt VARCHAR(100),
        IN @RV VARCHAR(100),
        IN @ALV VARCHAR(100),
        IN @P VARCHAR(100),
        IN @RVgf VARCHAR(100),
        IN @KVgf VARCHAR(100),
        IN @ZusatzKV VARCHAR(100),
        IN @ZusatzPV VARCHAR(100),
        IN @Inso VARCHAR(100),
        OUT @result BIGINT
)
LANGUAGE SQL
SPECIFIC SQL12080109131643
BEGIN

        IF @Id IS NULL OR @Id = 0
        THEN
                INSERT INTO "ADDON21C".BS
                (Typ, Sollmonat, G, F, H, U1, U2, U1erhoeht, U1ermaessigt)
                VALUES
                (@Typ, @SollMonat, @G, @F, @H, @U1, @U2, @U1erhoeht, @U1ermaessigt);
                 SET @result = IDENTITY_VAL_LOCAL();
        END IF;

END

数据表中“Sollmonat”的数据类型也是TIMESTAMP。

伙计们,如果你能帮助我,我会很高兴的。我完全没有想法,不,我不能将日期保存为表格中的VARCHAR。保存在数据库中可能是DATE,但我相信我会遇到同样的问题。

提前致谢!

@Steve它只会让整个事情变得更加混乱,因为我自己构建了一些类,允许我将类映射到数据表中,但请放心,这不是解决这个问题的方法。当我使用非手动创建的日期时,例如Date.Now,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

有几种方法可以试试这个。一个是具体说你的参数是一个时间戳,并传入Date类型:

cmdDB2.Parameters.Add("@SollMonat", DB2Type.Timestamp).Value = neuesDatum 

另一种可能性是定义日期的正确字符串表示,然后使用.ToString()。下面是几个格式字符串,使用与数据库的数据类型匹配的字符串。

Private Const DB2_TSTAMP = "yyyy-MM-dd-HH.mm.ss.ffffff"
Private Const DB2_DATE = "MM/dd/yyyy"

cmdDB2.Parameters.Add("@SollMonat", neuesDatum.ToString(DB2_TSTAMP))

这些选项过去对我有用。时间戳格式字符串应始终有效(它是时间戳的ODBC标准),但日期格式字符串可能因位置而异,请查看this article in Information Center