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

Come si può vedere sto impostando il valore predefinito di un parametro nel mio .Net SqlDataSource. Non penso però che la stringa stia emettendo il formato corretto. Qual è il formato corretto in modo che Tetime Datetime corrisponderà correttamente?Come convertire un Datetime .Net in un datetime T-SQL

Qui ci sono i formati che vengono emessi in questo momento:

  • 5/1/2009 12:00:00 AM
  • 5/4/2009 11:59:59 PM

Edit: Prima ho avuto DataSource dove dovrebbe essere stato scritto SqlDataSource

Ed ecco qualche codice

<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: Beh, ho capito il problema e sembrerà un po 'sciocco. Il codice non chiamava mai DefaultValue perché era sempre presente un valore. Quindi la mia unica soluzione era quella di creare un nuovo controllo etichetta nascosta e caricare il datetime corretto in quello. Quel praticamente ha fatto il trucco. Non so come ho trascurato questo.

risposta

3

Come si sta creando inizialmente il parametro? Dovresti essere in grado di specificare il tipo di dati come datetime in quel momento. Quindi assegnare direttamente il datetime al parametro piuttosto che provare a convertirlo in una stringa.


In base al codice che hai inserito, la tua migliore opzione è probabilmente solo per pre-compilare il tuo controllo. Inoltre, sembra corretto per il valore predefinito in quel contesto, quindi sospetto che il problema sia da qualche altra parte. Prova a impostare la proprietà CancelSelectOnNullParameter del controllo su False.

+0

Buoni suggerimenti. Non l'ho fatto prima, quindi dovrò capire perché non è impostato in questo modo. –

+0

Immagino che la procedura guidata sia stata utilizzata per impostare SqlDataSource e non ho visto alcun modo per scegliere un tipo –

+0

Dovrebbe aver generato del codice - sarebbe stato utile vedere quel codice. –

3

userei questo:

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

C'è una struct SqlDateTime è possibile utilizzare per questo

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

o direttamente in una linea (come lo SqlDateTime prende gli stessi argomenti in uno del costruttore sovraccarico come classe DateTime .NET):

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

io semplicemente non può farlo funzionare. DefaultValue richiede un tipo di stringa. –

+0

Il SelectParameter intendi? YYYYMMDDHHSSSS è il formato consigliato da Microsoft per il trasferimento di tipi di date tra sistemi come [così dicono] che tutti lo riconosceranno correttamente. – BenAlabaster

0

Ho sempre forzato le mie date a MMM gg aaaa quando passano come parametri, in questo modo non c'è modo che possa essere incasinato e capovolto.

2

Questo dovrebbe fare il trucco:

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

Per qualche motivo questo non ha funzionato, ma non so perché. Indagare. –

+0

Controlla le tue impostazioni internazionali (sia database che .NET) per assicurarti che corrispondano. – CMerat

+0

Ancora senza fortuna ......... –