Как я могу преобразовать .Net Datetime в T-SQL Datetime - PullRequest
5 голосов
/ 05 мая 2009
MyDataSource.SelectParameters["startDate"].DefaultValue =
                                     fromDate.SelectedDate.Date.ToString();

Как видите, я устанавливаю значение по умолчанию для параметра в моем .Net SqlDataSource. Я не думаю, что строка выводит правильный формат, хотя. Какой правильный формат, чтобы T-SQL Datetime соответствовал ему должным образом?

Вот форматы, которые выводятся прямо сейчас:

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

Редактировать: До того, как у меня был DataSource, где он должен был быть написан SqlDataSource

А вот код

<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: Ну, я разобрался с проблемой, и это покажется немного глупым. Код никогда не вызывал DefaultValue, потому что всегда присутствовало значение. Поэтому мое единственное решение состояло в том, чтобы создать новый скрытый элемент управления меткой и загрузить в него скорректированное значение даты и времени. Это в значительной степени помогло. Я не знаю, как я это упустил.

Ответы [ 5 ]

9 голосов
/ 05 мая 2009

Существует структура SqlDateTime, которую вы можете использовать для этого

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

Или непосредственно в одной строке (поскольку SqlDateTime принимает те же аргументы в одной из перегрузок конструктора, что и класс .NET DateTime):

System.Data.SqlTypes.SqlDateTime sqlDateTime = new System.Data.SqlTypes.SqlDateTime(2009, 5, 4);
3 голосов
/ 05 мая 2009

Как вы изначально создаете параметр? Вы должны быть в состоянии указать тип данных как datetime в то время. Затем присвойте свой параметр datetime непосредственно, а не пытайтесь преобразовать его в строку.


Исходя из кода, который вы разместили, ваш лучший вариант, вероятно, просто предварительно заполнить ваш контроль Кроме того, это прекрасно выглядит для значения по умолчанию в этом контексте, поэтому я подозреваю, что проблема в другом месте. Попробуйте установить для свойства CancelSelectOnNullParameter элемента управления значение False.

3 голосов
/ 05 мая 2009

Я бы использовал это:

MyDataSource.SelectParameters["startDate"].DefaultValue =
                                     fromDate.SelectedDate.Date.ToString("yyyyMMdd HH:mm:ss");
2 голосов
/ 05 мая 2009

Это должно сработать:

MyDataSource.SelectParameters["startDate"].DefaultValue = fromDate.SelectedDate.Date.ToString("yyyy-MM-dd HH:mm:ss")
0 голосов
/ 05 мая 2009

Я всегда выставляю свои даты в MMM dd гггг, когда передаю в качестве параметров, таким образом, нет никакого способа, которым это может быть испорчено и перевернуто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...