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

Como puede ver, estoy estableciendo el valor predeterminado de un parámetro en .Net SqlDataSource. No obstante, creo que la cadena no está produciendo el formato correcto. ¿Cuál es el formato correcto para que un T-SQL Datetime coincida correctamente?¿Cómo puedo convertir un .Net Datetime en un T-SQL Datetime

Éstos son los formatos que se generan en este momento:

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

Editar: Antes de que tuviera origen de datos donde debería haber sido escrito SqlDataSource

Y aquí es un código

<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> 

Editar: Bueno, me di cuenta del problema y va a parecer un poco tonto. El código nunca llamaba DefaultValue porque siempre había un valor presente. Así que mi única solución fue crear un nuevo control oculto de etiqueta y cargar el datetime corregido en eso. Eso prácticamente hizo el truco. No sé cómo lo pasé por alto.

Respuesta

3

¿Cómo estás creando el principio ¿parámetro? Debería poder especificar el tipo de datos como fecha y hora en ese momento. Luego, asigne su fecha y hora directamente al parámetro en lugar de intentar convertirlo a una cadena.


Según el código que ha publicado, la mejor opción es, probablemente, que rellene previamente su control. Además, eso se ve bien para el valor predeterminado en ese contexto, por lo que sospecho que el problema está en otro lugar. Intente configurar la propiedad CancelSelectOnNullParameter del control en False.

+0

Buenas sugerencias. No hice esto en primer lugar, así que tendré que investigar por qué no está configurado de esa manera. –

+0

Supongo que el asistente se usó para configurar un SqlDataSource y no vi ninguna forma de elegir un tipo –

+0

. Debería haber generado algún código, sería útil ver ese código. –

3

me gustaría utilizar esto:

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

Hay una estructura SqlDateTime puede utilizar para este

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

o directamente en una línea (como el SqlDateTime toma los mismos argumentos en uno de los constructor sobrecargas como la clase de .NET DateTime):

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

simplemente no puede conseguir que esto funcione. DefaultValue requiere un tipo de cadena. –

+0

¿El parámetro SelectParameter te refieres? YYYYMMDDHHMMSS es el formato recomendado por Microsoft para transferir tipos de fecha entre sistemas, ya que [por lo que dicen] todos lo reconocerán correctamente. – BenAlabaster

0

Siempre fuerzo mis fechas a MMM dd aaaa cuando paso como parámetros, de esa manera no hay forma de que se ensucie y se revuelva.

2

Esto debería hacer el truco:

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

Por alguna razón, esto no funcionó, pero no sé por qué. Investigando –

+0

Verifique su configuración regional (tanto la base de datos como .NET) para asegurarse de que coincidan. – CMerat

+0

Todavía no hay suerte ......... –