一千萬個為什麽

搜索

Typed DataSet Insert拋出SqlDateTime溢出

我正在使用帶有Insert語句的Typed DataSet;我有一個表定義了smalldatetime字段以接受空值。當我從.NET 2.0 FormView插入時,我得到一個“SqlDateTime溢出。必須在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。”

現在,我已經閱讀這篇文章,發送給類構造函數的參數定義為

global::System.Nullable DoB

所以,看起來它應該接受一個Nullable obj。此外,生成的代碼正在測試發送的值。

        if ((DoB.HasValue == true)) {
            command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
        }
        else {
            command.Parameters[6].Value = global::System.DBNull.Value;
        }

特別是,生成的SqlClient.SqlCommand.ExecuteScalar()運行時發生錯誤:

        try {
            returnValue = command.ExecuteScalar();
        }

所以,我想我的問題是:如何使用Typed DataSet設置一個空值(從CommandName = Insert上的FormView傳遞)到數據庫中的null?

最佳答案

好的,這就是對我有用的東西。首先,重申一下,我有一個帶有DataAdapter的Typed DataSet,它正在生成ADO對象。因此,在我的頁面上,我可以創建一個ObjectDataSource,其類型指向我的適配器,然後命名其中包含的不同訪問方法。

不,我有一個表格的插入,基本上所有列都可以為空;一些varchar,一些smalldatetime。

當我提交一個空表格時,我想要輸入空值。它們不是,並且拋出了許多錯誤。我最終做的是繼承ObjectDataSource以獲得對Inserting事件的訪問。 (可重用性的子類)在Inserting事件中,我循環通過InputParameters,如果它是一個字符串並且==“”,我將它設置為null。此外,您不能將ConvertNullToDBNull設置為true;導致字符串失敗。這成功地允許Nullable保持為空。

轉載註明原文: Typed DataSet Insert拋出SqlDateTime溢出