2016-07-08 57 views
-1

所以我認爲(int?)的要點是如果數據庫爲空,則爲int或null。但是,我收到錯誤int?不工作的數據庫空值

其他信息:指定的轉換無效。

VehicleGroupID是一個給出錯誤,因爲它在數據庫中爲NULL。它是(int?)所以它應該能夠正確接受空值?這不是(int?)的意思嗎?如果不是,那麼最簡潔的解決方案是什麼允許空值,因爲實際上我必須從數據庫獲取更多可空的整數。

這裏是我的代碼:

public int? VehicleClassID { get; set; } 
public int? VehicleGroupID { get; set; } 

public void getVehicleModelDetails() 
    { 
     DataSet retVal = new DataSet(); 
     SqlConnection sqlConn = (SqlConnection)_context.Database.Connection; 
     SqlCommand cmdReport = new SqlCommand("storedProc", sqlConn); 
     SqlDataAdapter daReport = new SqlDataAdapter(cmdReport); 
     using (cmdReport) 
     { 
      cmdReport.CommandType = CommandType.StoredProcedure; 
      daReport.Fill(retVal); 
     } 

     // Set buyer vehicle details 
     var row = retVal.Tables[0].Rows[0]; 
     VehicleClassID = (int?)row["VehicleClassID"]; 
     VehicleGroupID = (int?)row["VehicleGroupID"]; 
    } 

FYI:我使用EF6,但存儲過程返回的自定義數據,所以我使出了這一點。

+5

您是否嘗試過:'VehicleClassID = row.Field ( 「VehicleClassID」)'? –

+0

良好的通話!我是ASP.NET的新手,我看到這是以前的開發人員做這件事的方式,所以我認爲這是正確的方式。雖然你的方式是一個更好的解決方案!這正是我所期待的。 – Samir

回答

2

據我所知,Field擴展方法支持可空類型。所以,下面的線應該工作的魅力:

VehicleClassID = row.Field<int?>("VehicleClassID"); 
+1

Dude ...我以前在網上尋找我的解決方案時看到過這個答案,但我認爲他們使用的是不同於我的東西,因爲我不知道有一個Field方法。是的,這是我正在尋找的。謝啦! – Samir