Ich versuche, Parameter für eine DB2-Abfrage mit ODbc in C# zu verwenden, aber das Feld Timestamp gibt mir Probleme. Ich verwende DB2 Client 9.7 und updateDate ist ein DateTime-Typ. Hier ist mein Code:Verwenden von db2-odbc-Parametern mit Zeitstempel C#
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();
Dies ist der Fehler Ich erhalte:
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
ich auch versucht haben, die regelmäßig TIMESTAMP() -Funktion in DB2 enthalten beide Formate verwenden sie akzeptiert (Ex Zeitstempel. ('2016-10-20-12.00.00.000000') TIMESTAMP ('2016.10.20 12.00.00')), aber das gibt mir diese Fehlermeldung:
ERROR [22007] [IBM][CLI Driver][DB2] SQL0180N The syntax of the string representation of a datetime value is incorrect. SQLSTATE=22007
Wer weiß, wo ich bin falsch machen?
EDIT: Es funktioniert ohne Verwendung von Parametern, können Parameter nicht mit DB2 verwendet werden?
Sie konvertieren 'updateDate', die eine Datetime ist, um Zeichenfolge in Ihrem C# -Code, dann versuchen Sie es in der SQL-Anweisung zurück zu Zeitstempel zu konvertieren. Warum liefern Sie den Parameter nicht als DateTime? – mustaccio
@mustaccio Ändern meines Parameters zu so etwas? command.Parameters.AddWithValue ("? update_date", updateDate); Wenn ich das ausprobiert habe, erhalte ich den Fehler, dass "ein ungültiges Datum/Uhrzeit-Format verfälscht wurde, eine ungültige String-Repräsentation wurde angegeben". In meiner Befehlszeichenkette änderte ich mein updateDate auch, um ein regulärer Parameter anstelle einer Zeichenkette zu sein? gegen "?" mit immer noch keinem Glück. – Crobota