Exprimés .NET DateTime pour OracleDate
Je suis en train d'insérer une .NET valeur de type DateTime dans un Oracle DATE de colonne à l'aide de ODP.NET. Jusqu'à présent, j'ai essayé d'utiliser le OracleDate() constructeur à lancer le .NET DateTime comme suit:
new OracleDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTimeNow.Hour, DateTime.Now.Minute, DateTime.Now.Second)
Quand j'ai essayer cela, il insère la bonne année, le mois et le jour dans la colonne, mais le temps est toujours défini à minuit. Comment puis-je insérer le bon temps avec la date?
Sans paramètres, la commande SQL ressemble à ceci (DateTime.Maintenant, est utilisé à des fins de clarté, sinon je serais juste utiliser SYSDATE):
"update mytable set timestamp = '" + new OracleTimeStamp(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTimeNow.Second) + "'"
OriginalL'auteur kittyhawk | 2011-09-01
Vous devez vous connecter pour publier un commentaire.
Selon cette vous devez utiliser
OracleTimeStamp
commeOracleDbType
pour atteindre ce que vous voulez...OracleDate
est sans temps partie... ce comportement a commencé il y a quelques temps (IIRC Oracle 8) avec les pilotes JDBC... avec les pilotes JDBC il a été/est un peu bizarre solution de contournement dont je ne me souviens pas de ça maintenant... je ne sais pas si il existe une solution de contournement pour ODP.NET...OracleTimeStamp
est officiellement prises en charge pour les dates avec des portions du temps...EDIT - après l'OP ajouté instruction SQL:
Tout d'abord, cette déclaration contient deux problèmes - ne jamais le nom d'une colonne/table comme un mot réservé (c'est à dire
timestamp
)... l'autre problème est le manque de l'aide d'un paramètre qui dans ce cas ne vous conduira pas à l'injection SQL, mais est toujours une mauvaise pratique et un conduit (si cette déclaration est utilisé plusieurs fois) pour un minimum de perte de performance...SI vous voulez continuer à l'utiliser de cette façon, ALORS ce sera le travail:
s'il vous plaît montrer exactement instruction SQL - peut-être qu'il a besoin d'un minimum de modifications
veuillez voir mon EDIT au dessus...
OriginalL'auteur Yahia
Vous devriez être à l'aide de paramètres pour cela. Il ya aussi pas besoin d'utiliser l'Oracle spécifiques à des types de données lorsqu'un équivalent .NET type de données va faire. Cela a advatage de le rendre facile à échanger ODP.NET pour un pilote différent à une date ultérieure, comme la plupart des autres pilotes de travailler avec les indigènes .NET les types de données.
Je vais avoir un problème similaire. Dois-je simplement entrer dans une datetime? Maintenant, je vous entrez une chaîne formqted avec un temps sur la fin.
Oui, tous les ADO.NET pilotes de périphérique & bases de données que j'ai utilisé serait de travailler avec le code ci-dessus, en supposant que le "mytable.timestamp" dans la colonne ci-dessus possède un type de données (par exemple la DATE dans Oracle ou TIMESTAMP dans Postgres).
OriginalL'auteur Cory Grimster