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

Wie Sie sehen können, setze ich den Standardwert eines Parameters in meiner .Net SqlDataSource. Ich glaube nicht, dass die Zeichenfolge das richtige Format ausgibt. Was ist das korrekte Format, damit ein T-SQL Datetime es richtig zusammenbringt?Wie kann ich ein .Net Datetime in ein T-SQL konvertieren Datetime

Hier sind die Formate, die jetzt ausgegeben werden:

  • 5/1/2009 12:00:00 AM
  • 2009.05.04 23.59.59

Edit: Bevor ich hatte Datasource, wo es SqlDataSource geschrieben wurden, sollten

Und hier ist ein 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: Nun, dachte ich, das Problem aus, und es wird ein bisschen albern zu sein scheint. Der Code hat den DefaultValue nie aufgerufen, da immer ein Wert vorhanden war. Meine einzige Lösung bestand darin, ein neues verstecktes Label-Steuerelement zu erstellen und das korrigierte Datum in dieses zu laden. Das hat ziemlich gut funktioniert. Ich weiß nicht, wie ich das übersehen habe.

Antwort

3

Wie erstellen Sie zunächst die Parameter? Sie sollten den Datentyp zu diesem Zeitpunkt als datetime angeben können. Weisen Sie dann dem Parameter die Datetime direkt zu, anstatt zu versuchen, sie in eine Zeichenkette umzuwandeln.

Basierend auf dem von Ihnen geposteten Code besteht Ihre beste Option wahrscheinlich darin, Ihre Kontrolle vorab zu füllen. Außerdem sieht das für den Standardwert in diesem Kontext gut aus, also vermute ich, dass das Problem irgendwo anders ist. Versuchen Sie, die CancelSelectOnNullParameter-Eigenschaft des Steuerelements auf False festzulegen.

+0

Gute Vorschläge. Ich habe das nicht gemacht, also muss ich mir überlegen, warum es nicht so eingerichtet ist. –

+0

Ich vermute, der Assistent wurde verwendet, um eine SqlDataSource einzurichten und ich habe keine Möglichkeit gesehen, einen Typ zu wählen –

+0

Es hätte etwas Code generieren sollen - es würde helfen, diesen Code zu sehen. –

3

würde ich verwenden:

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

Es gibt eine SqlDateTime struct Sie für diese

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

verwenden oder direkt in einer Linie (wie die SqlDateTime die gleichen Argumente in einem der Konstruktor Überladungen als .NET DateTime-Klasse):

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

Ich kann einfach nicht bekommen dies funktioniert. DefaultValue erfordert einen String-Typ. –

+0

Der SelectParameter meinst du? YYYYMMDDHHMMSS ist Microsofts empfohlenes Format für die Übertragung von Datumstypen zwischen Systemen, da sie alle korrekt erkennen. – BenAlabaster

0

Ich erzwinge immer meine Daten MMM dd JJJJ, wenn sie als Parameter übergeben, auf diese Weise gibt es keine Möglichkeit, dass es vermasselt und umgedreht wird.

2

Diese den Trick tun sollten:

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

Aus irgendeinem Grund hat dies nicht funktioniert, aber ich weiß nicht warum. Untersuchung. –

+0

Überprüfen Sie Ihr Gebietsschema (sowohl Datenbank als auch .NET), um sicherzustellen, dass sie übereinstimmen. – CMerat

+0

Immer noch kein Glück ......... –