2009-05-04 8 views
5
MyDataSource.SelectParameters["startDate"].DefaultValue = 
            fromDate.SelectedDate.Date.ToString(); 

Comme vous pouvez le voir, je règle la valeur par défaut d'un paramètre dans ma SqlDataSource .Net. Je ne pense pas que la chaîne produise le bon format. Quel est le format correct pour qu'un datetime T-SQL corresponde correctement?Comment convertir une datetime .Net en une date-heure T-SQL

Voici les formats qui sont actuellement délivrés en sortie:

  • 5/1/2009 12:00:00 AM
  • 5/4/2009 23:59:59

Edit: Avant d'avoir DataSource où il aurait dû être écrit SqlDataSource

Et voici un code

<asp:SqlDataSource ID="MyDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:sampledb %>" SelectCommand="Recording_Select" SelectCommandType="StoredProcedure" OnSelecting="MyDataSource_Selecting"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="respondentID" DefaultValue="%" Name="RespondentID" PropertyName="Text" Type="String" /> 
     <asp:SessionParameter Name="projectCode" SessionField="proj" Type="String" /> 
     <asp:ControlParameter ControlID="interviewerList" Name="InterviewerID" PropertyName="SelectedValue" Type="String" /> 
     <asp:ControlParameter ControlID="dispCodeList" Name="dispCode" PropertyName="SelectedValue" Type="Int32" /> 
     <asp:ControlParameter ControlID="fromDate" DefaultValue="1/1/1900" Name="startDate" PropertyName="SelectedValue" Type="DateTime" /> 
     <asp:ControlParameter ControlID="toDate" DefaultValue="1/1/1900" Name="endDate" PropertyName="SelectedValue" Type="DateTime" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

Edit: Eh bien, je compris le problème et ça va te sembler un peu idiot. Le code n'appelait jamais DefaultValue car il y avait toujours une valeur présente. Donc, ma seule solution était de créer un nouveau contrôle d'étiquette caché et de charger le datetime corrigé dans celui-ci. Cela a presque fait l'affaire. Je ne sais pas comment j'ai négligé cela.

Répondre

3

Comment créez-vous initialement le paramètre? Vous devriez être en mesure de spécifier le type de données en tant que datetime à ce moment-là. Ensuite, attribuez directement votre datetime au paramètre plutôt que d'essayer de le convertir en chaîne.


Basé sur le code que vous avez posté, votre meilleure option est probablement juste de pré-remplir votre contrôle. En outre, cela semble très bien pour la valeur par défaut dans ce contexte, donc je soupçonne que le problème est ailleurs. Essayez de définir la propriété CancelSelectOnNullParameter du contrôle sur False.

+0

Bonnes suggestions. Je n'ai pas fait cela en premier lieu, donc je vais devoir regarder pourquoi ce n'est pas réglé de cette façon. –

+0

Je suppose que l'assistant a été utilisé pour configurer un SqlDataSource et je n'ai vu aucun moyen de choisir un type –

+0

Il aurait dû générer du code - il serait utile de voir ce code. –

3

J'utiliser:

MyDataSource.SelectParameters["startDate"].DefaultValue = 
            fromDate.SelectedDate.Date.ToString("yyyyMMdd HH:mm:ss"); 
9

Il y a une struct SqlDateTime vous pouvez utiliser pour cette

DateTime DotNetDateTime = new DateTime(2009, 5, 4); 
System.Data.SqlTypes.SqlDateTime sqlDateTime = new System.Data.SqlTypes.SqlDateTime(DotNetDateTime); 

ou directement dans une ligne (comme SqlDateTime prend les mêmes arguments dans l'un des constructeur surcharges en tant que classe .NET DateTime):

System.Data.SqlTypes.SqlDateTime sqlDateTime = new System.Data.SqlTypes.SqlDateTime(2009, 5, 4); 
+0

Je ne peux pas obtenir ce travail. DefaultValue requiert un type de chaîne. –

+0

Le SelectParameter que vous voulez dire? YYYYMMDDHHMMSS est le format recommandé par Microsoft pour le transfert de types de date entre les systèmes car [ils disent] qu'ils le reconnaîtront tous correctement. – BenAlabaster

0

Je force toujours mes dates à MMM jj aaaa lorsque je passe en paramètre, de cette façon, il n'y a aucun moyen de se foirer et de se retourner.

2

Cela devrait faire l'affaire:

MyDataSource.SelectParameters["startDate"].DefaultValue = fromDate.SelectedDate.Date.ToString("yyyy-MM-dd HH:mm:ss") 
+0

Pour une raison quelconque, cela n'a pas fonctionné, mais je ne sais pas pourquoi. Enquêter. –

+0

Vérifiez vos paramètres régionaux (base de données et .NET) pour vous assurer qu'ils correspondent. – CMerat

+0

Toujours pas de chance ......... –

Questions connexes