簡體   English   中英

將 C# 中的空 DateTime 插入 FoxPro

[英]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.DateOleDbType.DBDateOleDbType.DBTimeOleDbType.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM