繁体   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