2009-02-15 7 views
2

J'ai un problème avec GetDate() méthode.Quand je crée un nouvel utilisateur, dans le champ DateTime Date à venir correctement l'heure ne vient pas correctement, il devrait afficher générer toujours la date du système et time.Ex: 2/6/2009 12:00:00 AM, 2/7/2009 12:00:00 AM, 2/8/2009 12:00:00 AM etc. Je veux dire ici date est en train de changer, mais le système le temps ne change pas. Voici mon code:problème avec GetDate() dans asp.net

CREATE PROCEDURE dbo.NewUser 
(
@UserName varchar(50), 
@Password varchar(50), 
@EmailId varchar(50), 
@DateTime Date 
) 
AS 
insert into Login(UserName,Password,EmailId,DateTime) 
     values(@UserName,@Password,@EmailId,GetDate()) 


com.Parameters.Add("@DateTime", DateTime.Now.ToShortTimeString()); 
+0

Voulez-vous utiliser le datetime de votre serveur web ou datetime de SQL Server? – Bravax

Répondre

4

Je suggère deux changements:

  • Modifier le paramètre de la procédure stockée à datetime2 au lieu de simplement date. (Il existe d'autres options, telles que datetimeoffset.) Le type de date seulement stocke la date, il n'est donc pas surprenant que vous ne les voyiez pas :) Vous devrez également changer la table si son schéma utilise une colonne date.
  • Ne convertissez pas la valeur du paramètre en chaîne lorsque vous l'appelez. Utilisez

    com.Parameters.Add("@DateTime", DateTime.Now); 
    

Vous pouvez également envisager d'utiliser UTC au lieu de l'heure locale sur le serveur.

EDIT: Splattne a absolument raison - en appelant GetDate dans le proc stocké, la valeur de votre paramètre est sans importance. En supposant que vous voulez utiliser le paramètre, changer le corps de votre proc stocké à:

insert into Login(UserName, Password, EmailId, DateTime) 
    values(@UserName, @Password, @EmailId, @DateTime) 

Double vérifier le type de Login.DateTime bien!

+0

Merci M.Jon u résolu mon problème son fonctionnement bien maintenant .... – user59637

2

Vous devez utiliser Sql 2008, avec son nouveau type de données Date.

CREATE PROCEDURE dbo.NewUser (@UserName varchar (50), @Password varchar (50), @EmailId varchar (50), @DateTime date)

Modifier le code Sql à utiliser DateTime (et, le tableau, si nécessaire) et vous devriez être mis.

4

Si vous utilisez getdate() dans votre procédure stockée, votre paramètre @DateTime est obsolète. Selon votre exemple de code, il sera ignoré. Donc, la racine de votre problème doit être ailleurs, si j'interprète correctement votre question.

Je voudrais vérifier le type de données de la colonne de date dans la table SQL. La déclaration de la table doit être:

UserName varchar(50) 
Password varchar(50) 
EmailId varchar(50) 
DateTime DateTime /* not "Date" */ 
1

utilisation Date du DateTime.Now

com.Parameters.Add("@DateTime", DateTime.Now.Date) 

Aussi ma suggestion est d'utiliser UTC instaed

com.Parameters.Add("@DateTime", DateTime.UtcNow.Date) 
Questions connexes