2010-05-23 88 views
0

我使用SQLDatasource與Formview結合使用。 當我想插入或更新一個沒有值的DateTime時,我總是得到一個錯誤。ASP.Net:插入null日期時間

如何插入DateTime null。

我的SqlDataSource

<asp:SqlDataSource ID="sqldsDetailOrder" runat="server" ConnectionString="<%$ ConnectionStrings:csBookStore %>" 
    SelectCommand="SELECT 'AUTHOR' = tblAuthors.FIRSTNAME + ' ' + tblAuthors.LASTNAME, tblBooks.*, tblGenres.*, tblLanguages.*, tblOrders.* FROM tblAuthors INNER JOIN tblBooks ON tblAuthors.AUTHOR_ID = tblBooks.AUTHOR_ID INNER JOIN tblGenres ON tblBooks.GENRE_ID = tblGenres.GENRE_ID INNER JOIN tblLanguages ON tblBooks.LANG_ID = tblLanguages.LANG_ID INNER JOIN tblOrders ON tblBooks.BOOK_ID = tblOrders.BOOK_ID WHERE tblOrders.ID = @ID" 
    DeleteCommand="DELETE FROM [tblOrders] WHERE [ID] = @ID" 
    InsertCommand="INSERT INTO [tblOrders] ([NAME], [ADDRESS], [CITY], [PC], [DATE], [BOOK_ID], [COUNT], [AMOUNT], [DELIVERED], [DDATE], [PAID], [PDATE]) VALUES (@NAME, @ADDRESS, @CITY, @PC, @DATE, @BOOK_ID, @COUNT, @AMOUNT, @DELIVERED, @DDATE, @PAID, @PDATE)" 
    UpdateCommand="UPDATE [tblOrders] SET [NAME] = @NAME, [ADDRESS] = @ADDRESS, [CITY] = @CITY, [PC] = @PC, [DATE] = @DATE, [BOOK_ID] = @BOOK_ID, [COUNT] = @COUNT, [AMOUNT] = @AMOUNT, [DELIVERED] = @DELIVERED, [DDATE] = @DDATE, [PAID] = @PAID, [PDATE] = @PDATE WHERE [ID] = @ID"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="gvOrdersAdmin" Name="ID" 
      PropertyName="SelectedValue" Type="Int32" /> 
    </SelectParameters> 
    <DeleteParameters> 
     <asp:Parameter Name="ID" Type="Int32" /> 
    </DeleteParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="NAME" Type="String" /> 
     <asp:Parameter Name="ADDRESS" Type="String" /> 
     <asp:Parameter Name="CITY" Type="String" /> 
     <asp:Parameter Name="PC" Type="String" /> 
     <asp:Parameter DbType="DateTime" Name="DATE" /> 
     <asp:Parameter Name="BOOK_ID" Type="Int32" /> 
     <asp:Parameter Name="COUNT" Type="Int32" /> 
     <asp:Parameter Name="AMOUNT" Type="Decimal" /> 
     <asp:Parameter Name="DELIVERED" Type="Boolean" /> 
     <asp:Parameter DbType="DateTime" Name="DDATE" /> 
     <asp:Parameter Name="PAID" Type="Boolean" /> 
     <asp:Parameter DbType="DateTime" Name="PDATE" /> 
     <asp:Parameter Name="ID" Type="Int32" /> 
    </UpdateParameters> 
    <InsertParameters> 
     <asp:Parameter Name="NAME" Type="String" /> 
     <asp:Parameter Name="ADDRESS" Type="String" /> 
     <asp:Parameter Name="CITY" Type="String" /> 
     <asp:Parameter Name="PC" Type="String" /> 
     <asp:Parameter DbType="DateTime" Name="DATE" /> 
     <asp:Parameter Name="BOOK_ID" Type="Int32" /> 
     <asp:Parameter Name="COUNT" Type="Int32" /> 
     <asp:Parameter Name="AMOUNT" Type="Decimal" /> 
     <asp:Parameter Name="DELIVERED" Type="Boolean" /> 
     <asp:Parameter DbType="DateTime?" Name="DDATE" /> 
     <asp:Parameter Name="PAID" Type="Boolean" /> 
     <asp:Parameter DbType="DateTime" Name="PDATE" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

感謝文森特

+0

是否該列中的數據庫支持空? – R0MANARMY 2010-05-23 14:50:34

+0

是的,它支持null – Vinzcent 2010-05-23 14:58:22

回答

0

爲了你需要在Nullable包裝一個空的DateTime工作。最常見的做法是將其聲明爲DateTime?(問號是使其可以爲空的語法)。

+0

當我這樣做時,出現以下錯誤: 無法通過字符串表示形式'DateTime?'創建一個'System.Data.DbType'類型的對象。爲'DbType'屬性。 – Vinzcent 2010-05-23 14:55:42

+0

@Vinzcent:岑的權利,你還需要把它作爲一個DBNull.Value來處理,而不是直接向上。 – R0MANARMY 2010-05-23 15:12:21

1

插入DBNull.Value,不只是null

+0

我不認爲我可以選擇我插入的內容,因爲我使用了SQLDataSource。 – Vinzcent 2010-05-23 15:19:31