2016-07-28 83 views
-1

我從Visual Studio項目調用存儲過程並傳遞DateTime參數。如何將DateTime對象設置爲null並將其作爲參數發送給存儲過程?

下面是C#代碼:

DateTime? dtStartFrom = null; 
var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL @dtStartFrom", new SqlParameter("dtStartFrom", dtStartFrom)).ToList(); 

在這裏,在存儲過程中如何變量定義:

@dtStartFrom date 

該行我得到這個異常:

The parameterized query '(@dtStartFrom nvarchar(4000))SPDamageEventsDTL @dtStartFrom' expects the parameter '@dtStartFrom', which was not supplied. 

所以我想有是空值的問題,所以我嘗試這種方式:

DateTime? dtStartFrom = DBNull.Value; 

但在行上方我得到這個錯誤:

Cannot implicitly convert type 'System.DBNull' to 'System.DateTime?' 

任何想法,我怎麼可以設置DateTime對象爲null,並將其作爲參數來我的存儲過程?

+0

你試過命名的SqlParameter @dtStartFrom而不只是dtStartFrom? –

回答

1

你的參數名稱應與該查詢:

new SqlParameter("@dtStartFrom", dtStartFrom); 

編輯:

DateTime? dtStartFrom = null; 
SqlParameter sqlDateparam = new SqlParameter("@dtStartFrom", SqlDbType.DateTime); 
sqlDateparam.IsNullable = true; 

if (dtStartFrom.HasValue) 
    sqlDateparam.Value = dtStartFrom.Value; 
else 
    sqlDateparam.Value = DBNull.Value 

var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL @dtStartFrom", sqlDateparam).ToList(); 
+0

謝謝我修復了它,但現在我得到錯誤: SqlDateTime溢出。必須介於1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。 是否可以發送null作爲參數? – Michael

+0

@Michael檢查編輯。 – user3185569

+0

Re:_「SqlDateTime溢出」_,你在數據庫中使用DATETIME或DATETIME2類型嗎? – stakx

相關問題