Элемент управления ASP.NET Calendar возвращает тип Date, но мне нужно Datetime для вставки в SQL Server 2005 - PullRequest
0 голосов
/ 31 марта 2010

Я использую элемент управления ASP для вставки значения даты и времени в поле, которое будет частью вставки в таблицу базы данных SQL Server 2005.

Я получаю следующую ошибку, когда отправляю форму на сервер и пытаюсь вставить в таблицу:

ArgumentException: используемая версия SQL Server не поддерживает тип данных «дата».

Похоже, элемент управления Calendar возвращает значение типа Date. Как сделать так, чтобы элемент управления Calendar вместо этого возвращал значение DateTime?

Теперь я знаю, что SQL Server 2005 не поддерживает поля типа Date.

Вот мой код клиента, в котором у меня есть элемент управления Calendar в FormView:

<tr>
    <td class="style4">
        Date</td>
    <td>
        <asp:Calendar ID="Calendar1" runat="server" BackColor="White" 
            BorderColor="#3366CC" BorderWidth="1px" CellPadding="1" 
            DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" 
            ForeColor="#003399" Height="200px" SelectedDate='<%# Bind("EventDate") %>' 
            Width="220px">
            <SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
            <SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
            <WeekendDayStyle BackColor="#CCCCFF" />
            <TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
            <OtherMonthDayStyle ForeColor="#999999" />
            <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
            <DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
            <TitleStyle BackColor="#003399" BorderColor="#3366CC" BorderWidth="1px" 
                Font-Bold="True" Font-Size="10pt" ForeColor="#CCCCFF" Height="25px" />
        </asp:Calendar>
    </td>
</tr>

Ответы [ 4 ]

0 голосов
/ 04 декабря 2013

Я считаю, что он не возвращает правильный формат, потому что он переключается на месяцы и годы. Существует разница между возвратом календарей, датой и временем2. Возможно, вы захотите сделать datetime2, так как он содержит любые возможные значения, которые может вернуть .net, но вы должны сделать свою домашнюю работу на этом.

Существует множество способов получения даты из календаря, но я предпочитаю следующее:

string calClause = " START_TS > '";

calClause += Calendar1.SelectedDate.ToString("yyyy/MM/dd") + "' ";

Этот фрагмент кода должен сгенерировать что-то похожее на это:

START_TS > '2013-09-04'  

Затем необходимо добавить где

WHERE START_TS > '2013-09-04'  

И затем добавьте это к тексту вашей команды после предложения where. (как и мое приложение, вы можете включить пустые и нулевые значения в вашу таблицу)

SELECT * From YourTableName WHERE START_TS > '2013-09-04 ' AND START_TS != '' AND START_TS is not null 

Я использую метод для генерации команды SQL, обычно написанной как cmdText, на основе различных элементов страницы, таких как флажки и календари.

0 голосов
/ 31 марта 2010

Насколько я понял, вы пытаетесь создать таблицу со столбцом типа DATE. Действительно, только SQL Server 2008 поддерживает это, 2005 - нет.

Даже если Calendar.SelectedDate вернет System.DateTime, и вы попытаетесь вставить его в столбец типа DATETIME (на SQL Server 2005), он будет успешно вставлен.

Если столбец будет иметь тип DATE (в SQL Server 2008), дата будет усечена и также успешно вставлена ​​

0 голосов
/ 31 марта 2010

Вот мой код:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:revi_rafaDbConnectionString %>" 
    DeleteCommand="DELETE FROM [Event] WHERE [EventID] = @EventID" 
    InsertCommand="INSERT INTO [Event] ([[HostLogin], [EventDate], [EventTime], [EventLocation], [EventDescription]) VALUES (@LoginID, @EventDate, @EventTime, @EventLocation, @EventDescription)" 
    SelectCommand="SELECT * FROM [Event]" 
    UpdateCommand="UPDATE [Event] SET [HostLogin] = @HostLogin, [EventDate] = @EventDate, [EventTime] = @EventTime, [EventLocation] = @EventLocation, [EventDescription] = @EventDescription WHERE [EventID] = @EventID">
    <DeleteParameters>
        <asp:Parameter Name="EventID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="HostLogin" Type="String" />
        <asp:Parameter DbType="Datetime" Name="EventDate" />
        <asp:Parameter Name="EventTime" Type="String" />
        <asp:Parameter Name="EventLocation" Type="String" />
        <asp:Parameter Name="EventDescription" Type="String" />
        <asp:Parameter Name="EventID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="LoginID" />
        <asp:Parameter DbType="Datetime" Name="EventDate" />
        <asp:Parameter Name="EventTime" Type="String" />
        <asp:Parameter Name="EventLocation" Type="String" />
        <asp:Parameter Name="EventDescription" Type="String" />
    </InsertParameters>
</asp:SqlDataSource>

Я перешла дату в выпуске datetime. Я установил DbType для EventDate в Datetime. Однако теперь я получаю:

[SqlTypeException: переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 31.12.9999 23:59:59.]

0 голосов
/ 31 марта 2010

Не уверен, почему вы получаете это? Вы говорите ASP.NET 2.0 или выше? По умолчанию он использует объект DateTime; Вы всегда можете убедиться в этом:

DateTime evalDate = new DateTime(cal1.SelectedDate.Year, cal1.SelectedDate.Month, cal1.SelectedDate.Day, 0, 0, 0);

И используйте это для передачи в БД ...

Может ли это быть также из-за процесса вставки, который имеет дату, а не переменную datetime?

РЕДАКТИРОВАТЬ : DateTime оценивается в 1/1/0001, если не указан, что является проблемой для SQL Server; Вы должны убедиться, что он не меньше, чем 01.01.1753. Это боль ... если вы можете сделать поле пустым и использовать DateTime? или Nullable, это обходной путь, или всегда гарантируйте минимальную дату.

...