[英]Insert empty DateTime from C# into FoxPro
我正在嘗試使用 C# 中的DbParameter
將空的DateTime
插入 FoxPro 數據庫。 我們的應用程序將 FoxPro 數據與 SQL 服務器和 .NET 模型/數據結合在一起。
我當前的問題是 C# 中的大多數DateTime
類型都不可為空,也不應該為空。 但是,我們在 FoxPro 中的大部分遺留數據都是空日期(顯示為'//::')。 我正在嘗試插入 FoxPro 表,在其中檢查 .NET DateTime
是否符合某些標准,然后插入一個空日期。 最后一部分已被證明是一場噩夢。
到目前為止我已經嘗試過:
.Parameters.Add(string.Empty, new DateTime())
上面可以理解地插入01/01/0001
但不是我們想要的。
.Parameters.Add(string.Empty, "{}")
.Parameters.Add(string.Empty, "{:://}")
.Parameters.Add(string.Empty, "{//}")
.Parameters.Add(string.Empty, "'{}'")
以上所有導致
System.Data.OleDb.OleDbException:“數據類型不匹配”。
這是有道理的,因為我正在嘗試將string
發送到DateTime
類型的字段。
有誰知道如何在 FoxPro 中插入一個空的DateTime
?
如果我對您的理解正確,那么您使用的不是DbParameter
而是OleDbParameter
,並且您是通過OleDbParameterCollection.Add
方法添加它們的?
如果是這樣,請考慮您使用的是.Add(String, Object)
的重載,而您可以改用.Add(String, OleDbType)
的重載:
.Parameters.Add(string.Empty, OleDbType.Date)
OleDbParameter
的默認值為null
,因此您無需為空日期執行任何操作。
此外,根據列在 FoxPro 數據庫架構中的定義方式,可能適合傳遞OleDbType.Date
、 OleDbType.DBDate
、 OleDbType.DBTime
或OleDbType.DBTimeStamp
。 此處記錄了 OleDB 類型的完整列表,但我不完全確定它們如何與 FoxPro 的數據類型保持一致。
我相信你的第二個例子很接近,但你的日期和時間部分顛倒了。
它應該是.Parameters.Add(string.Empty, "{//::}")
//
代表日期部分,而::
代表時間部分。
不確定 VFP 的 SQL-Insert 語句,但您可能需要調整它並執行兩個不同的插入。 一個如果日期存在,另一個如果不存在。
對於沒有日期的人,我會硬輸入以下內容(例如“?”是參數占位符的地方)
insert into yourTable ( fld1, fld2,..., YourDateField ) values ( ?, ?, ..., ctot('') )
函數 CTOT() 表示日期時間的字符,空字符串將符合預期的 VFP 日期/時間字段。
為我工作。
Parameters.AddWithValue("CreateDate", new DateTime(1899,12,30,0,0,0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.