我不得不從單獨的數據庫中提取兩個單獨的數據查詢,現在我試圖將它合併到C#中的一個數據表中。但是,每當我從主要包含日期時間值的列產生空值時,我都會收到錯誤。我似乎無法找到我可以做些什麼來解決它。我試過如果語句來捕獲空值等,但不斷收到異常。無法將DBNull.Value轉換爲輸入System.DateTime
我收到以下錯誤:
System.InvalidCastException was unhandled
HResult=-2147467262
Message=Cannot cast DBNull.Value to type 'System.DateTime'. Please use a nullable type.
Source=System.Data.DataSetExtensions
StackTrace:
at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
at HueniData.Program.Main(String[] args) in c:\Visual Studio Projects\HueniData\HueniData\Program.cs:line 60
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
以下代碼:
var resultTable = from t1 in actualTable.AsEnumerable()
join t2 in recipeTable.AsEnumerable()
on t1.Field<int>("Step No") equals t2.Field<int>("Step No")
select new { t1, t2 };
DataTable newTable = new DataTable();
newTable.Columns.Add("StepNo", typeof(int));
newTable.Columns.Add("ActualDuration", typeof(decimal));
newTable.Columns.Add("RecipeDuration", typeof(decimal));
newTable.Columns.Add("StartTime", typeof(DateTime));
DataRow newRow;
foreach (var dr in resultTable)
{
newRow = newTable.NewRow();
newRow["StepNo"] = dr.t1.Field<int>("Step No");
newRow["ActualDuration"] = dr.t1.Field<decimal>("ActualDuration");
newRow["RecipeDuration"] = dr.t2.Field<decimal>("RecipeDuration");
**newRow["StartTime"] = dr.t1.Field<DateTime>("Step Start Time");**
newTable.Rows.Add(newRow);
}
UPDATE: 下面的答案是有益的,但我已經基本試圖做這兩個原本使用各種if語句並將datetime更改爲datetime ?.我仍然得到錯誤。我解決這個問題的方法是使用:
newTable.Columns.Add("StartTime", typeof(Object));
newRow["StartTime"] = dr.t1.Field<Object>("Step Start Time");
但如果任何人都可以向我解釋了什麼問題我還是很想知道。
請不要承擔。我做了搜索,每次嘗試更改代碼導致出現新的異常。您的評論沒有幫助。 – Danrex