2013-02-14 10 views
0

Je suis vraiment très frustré en ce moment, car je ne parviens tout simplement pas à obtenir un type de données DATE créé manuellement par VB.NET dans une colonne DB2 qui a le type de données TIMESTAMP.Conversion de vb.net String en DB2 Timestamp

J'ai essayé plusieurs façons de gérer cela, mais quoi que je fasse, j'ai toujours l'erreur "SQL0180N: La syntaxe de la représentation sous forme de chaîne d'une valeur datetime est incorrecte".

La partie dans mon application qui gère la conversion de chaîne à ce jour est ici:

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

La chaîne de conversion ressemble à ceci: 2013-01-01 00:00:00

J'ai aussi essayé le format allemand d'une date (01.01.203), essayé d'utiliser la chaîne sans la dernière partie (00:00:00), mais peu importe ce que je fais, ça finit toujours de la même façon. J'utilise une procédure stockée pour insérer les données dans une table. La date est livrée avec le paramètre "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 

Le type de données pour "Sollmonat" à l'intérieur du datatable est aussi TIMESTAMP.

Les gars, je serais très heureux si vous pouvez m'aider ici. Je suis complètement à court d'idées et non, je ne peux pas enregistrer la date en tant que VARCHAR dans la table. L'enregistrement est comme DATE dans la base de données pourrait être possible, mais je crois que j'aurais le même problème là.

Merci d'avance!

@Steve Cela ne ferait que rendre le tout plus confus, parce que je me construis quelques classes qui me permettent de mapper des classes en données, mais soyez assuré que ce n'est pas ce que je veux dire. Lorsque j'utilise une date non créée manuellement, comme Date.Now par exemple, cela fonctionne correctement.

+0

Pourriez-vous afficher le code dans lequel vous transmettez la valeur TIMESTAMP à la procédure stockée sous-jacente? – Steve

+0

Un simple CAST (@SollMonat As TIMESTAMP) 'ne le fera-t-il pas? –

+0

Non, la distribution n'aide pas. Toujours la même erreur. – OhSnap

Répondre

1

Il y a plusieurs façons d'essayer cela. Personne ne dit expressément que votre paramètre est un horodatage, et passer dans le type Date:

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

Une autre possibilité consiste à définir la représentation de chaîne correcte d'une date, puis en utilisant .ToString(). Voici quelques chaînes de formatage, utilisez celle qui correspond au type de données de votre base de données.

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)) 

Ces options ont fonctionné pour moi dans le passé. La chaîne de format d'horodatage doit fonctionner tout le temps (c'est la norme ODBC pour un horodatage), mais la chaîne de format de date peut varier selon l'emplacement, jetez un oeil à this article in Information Center.

+0

Soupir .. malheureusement, le "paramétrage" est un peu dynamique. Donc je ne peux pas faire des choses comme ça. Vous êtes sur la bonne voie cependant. Juste remarqué que la "date manuelle" n'a pas les heures, minutes et secondes. Je pense que la seule façon de faire cela est de faire une chaîne de la date. Je n'ai pas voulu faire ça. : / – OhSnap