将空的DateTime从C#插入到FoxPro中

问题描述 投票:1回答:3

我试图在C#中使用DateTime将空DbParameter插入到FoxPro数据库中。我们的应用程序将FoxPro数据与SQL Server和.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类型的字段。

有谁知道如何将空DateTime插入FoxPro?

c# datetime visual-foxpro
3个回答
1
投票

如果我正确理解你,你不是使用DbParameter,而是使用OleDbParameter,你是通过OleDbParameterCollection.Add方法添加它们的?

如果是这样,请考虑您正在使用.Add(String, Object)的重载,而您可以使用.Add(String, OleDbType)的重载:

.Parameters.Add(string.Empty, OleDbType.Date)

OleDbParameter的默认值是null,因此您不需要为空日期做更多的事情。

此外,根据您的FoxPro数据库架构中的列的定义方式,可能适合传递OleDbType.DateOleDbType.DBDateOleDbType.DBTimeOleDbType.DBTimeStampfull list of OleDB types is documented here,但我不完全确定它们如何与FoxPro的数据类型保持一致。


0
投票

我相信你的第二个例子很接近,但你有相反的日期和时间部分。

它应该是.Parameters.Add(string.Empty, "{//::}")

//代表Date部分,::代表Time部分。


0
投票

不确定您的VFP的SQL-Insert语句,但您可能需要调整它并执行两个不同的插入。一个IF存在一个日期,如果不存在则另一个日期存在。

对于没有日期的那个,我会硬输入以下内容(例如“?”是参数占位符)

insert into yourTable ( fld1, fld2,..., YourDateField ) values ( ?, ?, ..., ctot('') )

函数CTOT()表示字符到datetime,空字符串将符合预期的VFP日期/时间字段。

© www.soinside.com 2019 - 2024. All rights reserved.