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