我使用帶有Insert語句的Typed DataSet;我有一個表中有一個smalldatetime字段被定義爲接受空值。當我從.NET 2.0 FormView插入時,出現「SqlDateTime溢出,必須在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。」現在Typed DataSet引發的SqlDateTime溢出插入
,我讀過this post,並且發送到類的構造函數的參數定義爲
global::System.Nullable<global::System.DateTime> DoB
因此,它看起來像它應該接受一個可空的obj。此外,生成的代碼正在測試發送的值。
try {
returnValue = command.ExecuteScalar();
}
所以,我想我的問題是:我怎麼使用強類型DataSet將一個空的
if ((DoB.HasValue == true)) {
command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
}
else {
command.Parameters[6].Value = global::System.DBNull.Value;
}
具體而言,當產生SqlClient.SqlCommand.ExecuteScalar()運行在錯誤發生值(從CommandView = Insert上的FormView傳遞)到數據庫中的空值?
其他跟進:這裏的部分問題是我無法調試。作爲解決方法,我複製了該對象並創建了自己的對象。由於類型化數據集爲他們的表適配器創建了部分類,我點擊它並添加了Insert對象的副本。這讓我在它上面放置了一個斷點,看看這些值是什麼。 第二部分:如果您查看FormViewInsertEventArgs,日期被髮送爲空。但是,當您將其與Insert方法進行比較時,您會發現它已更改爲{1/1/0001 12:00:00 AM} ...需要更多工作... – 2010-04-18 19:50:15
好的,必須有一個錯誤MS實施其反射例程的方式。如果我將我的方法中的參數類型更改爲字符串,它會以空白形式出現。如果我評估Nullable nix =「」;我*做*得到空。在ObjectDataSourceMethod GetResolvedMethodData()調用中,必須有*錯誤,因爲它創建了一個參數列表來調用該方法。在某處,我認爲它只是在做一個新的DateTime(),而不是一個新的Nullable ()。我只是沒有更多時間去尋找它。 –
2010-04-18 21:16:39