台灣最大程式設計社群網站
線上人數
1599
 
會員總數:245799
討論主題:189428
歡迎您免費加入會員
討論區列表 >> C# >> 如何解決「提供者無法決定 DateTime 值」
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何解決「提供者無法決定 DateTime 值」
價值 : 200 QP  點閱數:259 回應數:9
樓主

Alston
門外漢
0 5
148 16
發送站內信

語言:C#
編譯軟體:Visual Studio 2019
資料庫:Microsoft Access 2010
程式功能:User輸入產品名稱後,程式自動到Access抓出生產報表。

錯誤資訊:System.InvalidOperationException: '提供者無法決定 DateTime 值。例如,剛建立資料列,DateTime 資料行的預設值無法使用,而消費者尚未設定新 DateTime 值。'

問題詳細描述:
Access中有欄位「產品名稱」、「開始日期」、「結束日期」,其中「產品名稱」格式為文字,其他兩個為時間,
使用者會在textBox1中輸入產品名稱,按下Button1之後,程式就會到Access抓資料,並將資料Show在dataGridView1中,
但會出現上述「提供者無法決定DateTime值...」的錯誤,是否有前輩可以協助除錯,謝謝!



搜尋相關Tags的文章: [ C# ] , [ Access ] , [ dataGridView ] , [ WinForm ] , [ DataTable ] ,
本篇文章發表於2020-02-25 13:27
1樓
回應

HB
檢舉此回應
可能是第28, 29行的問題,加入 IsDBNull(DataSetValue.Tables(0).Rows(i)("結束時間"))判斷應該可以解決:若是==>nothing,否才提供值?
供參考。
本篇文章回覆於2020-02-26 07:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

HB
檢舉此回應
更正:C#需將Nothing改用Null
本篇文章回覆於2020-02-26 08:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Alston
檢舉此回應
謝謝HB大回應,我晚些時候來試試!
本篇文章回覆於2020-02-26 08:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Alston
檢舉此回應
目前測試跟傳入時是否為null似乎沒有影響,我如果用時間來查詢不會報錯,但用產品名稱查詢反而會...
本篇文章回覆於2020-02-27 08:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

HB
檢舉此回應
這行修改如下試試:
dataTable.Rows.Add(new object[] {
      DataSetValue.Tables[0].Rows[i]["產品名稱"].ToString(),
      DataSetValue.Tables[0].Rows[i]["開始時間"],
      DataSetValue.Tables[0].Rows[i]["結束時間"]});
本篇文章回覆於2020-02-27 10:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Alston
檢舉此回應
HB大早

若將
DataSetValue.Tables[0].Rows[i]["開始時間"].ToString()
修改為
DataSetValue.Tables[0].Rows[i]["開始時間"]

會報錯:「無法將類型'object'隱含轉換成'string'。已存在明確轉換(是否漏了轉型?)」

其實這個Access資料庫有許多欄位,只是我為了問題方便僅列出三個欄位,整個Access資料庫的欄位如下:
[生產線別],[客戶],[產品名稱],[批量],[生產總數量],[累積數(正)],[累積數(反)],[開始時間],[結束時間],[生產人]

除了[開始時間]與[結束時間]為時間格式,其他都為文字。

我自己做了測試,將[開始時間]與[結束時間]從DataTable中移除,同時也不要到Access抓這兩個欄位的資料,沒想到也會出現DateTime的錯誤,明明我已經沒有使用任何DateTime值了...
本篇文章回覆於2020-03-02 09:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Alston
檢舉此回應
補充一下,報錯時是顯示在下面這一行程式:
dataAdpter.Fill(DataSetValue);
本篇文章回覆於2020-03-02 09:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

Alston
檢舉此回應
問題解決了,自己回應一下,供日後的人參考。
也感謝HB大的熱情回覆!

錯誤原因是Access紀錄了非法的日期/時間格式,導致dataAdpter抓資料時會出現錯誤,我更換一個資料庫後即解決了這個問題。
本篇文章回覆於2020-03-02 11:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

HB
檢舉此回應
To Alston:

5F提供的建議是經過測試,可以執行的,當然簡易的資料庫,只是設定提供的3個欄位,只有產品名稱設定為文字,其餘設定為Date資料型別。

至於Access紀錄了非法的日期/時間格式,無法判斷;依經驗得知,要寫入資料庫前,需先判斷資料型別、資料值是否正確,因為User端的操作,可能出乎設計者的想像。

本篇文章回覆於2020-03-02 12:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.