将 C# 中的空 DateTime 插入 FoxPro
Insert empty DateTime from C# into FoxPro
我正在尝试使用 C# 中的 DbParameter
将空的 DateTime
插入到 FoxPro 数据库中。我们的应用程序将 FoxPro 数据与 SQL 服务器和 .NET models/data.
结合在一起
我当前的问题是 C# 中的大多数 DateTime
类型都不可为空,也不应该为空。但是,我们在 FoxPro 中的大部分遗留数据都是空日期(显示为“/ / : :”)。我正在尝试插入到 FoxPro table 中,在那里我检查 .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: 'Data type mismatch'.
这是有道理的,因为我正在尝试将 string
发送到 DateTime
类型的字段。
有谁知道如何将空 DateTime
插入 FoxPro?
我相信你的第二个例子很接近,但你的日期和时间部分颠倒了。
应该是.Parameters.Add(string.Empty, "{//::}")
//
代表日期部分,::
代表时间部分。
不确定您的 SQL-VFP 插入语句,但您可能需要调整它并执行两次不同的插入。一个如果日期存在,另一个如果不存在。
对于没有日期的,我会硬输入以下内容(例如“?”是参数占位符)
insert into yourTable ( fld1, fld2,..., YourDateField ) values ( ?, ?, ..., ctot('') )
函数 CTOT() 表示字符到日期时间,空字符串将符合预期的 VFP Date/time 字段。
如果我没理解错的话,你不是在使用 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
可能是合适的. full list of OleDB types is documented here,但我不完全确定它们如何与 FoxPro 的数据类型对齐。
我正在尝试使用 C# 中的 DbParameter
将空的 DateTime
插入到 FoxPro 数据库中。我们的应用程序将 FoxPro 数据与 SQL 服务器和 .NET models/data.
我当前的问题是 C# 中的大多数 DateTime
类型都不可为空,也不应该为空。但是,我们在 FoxPro 中的大部分遗留数据都是空日期(显示为“/ / : :”)。我正在尝试插入到 FoxPro table 中,在那里我检查 .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: 'Data type mismatch'.
这是有道理的,因为我正在尝试将 string
发送到 DateTime
类型的字段。
有谁知道如何将空 DateTime
插入 FoxPro?
我相信你的第二个例子很接近,但你的日期和时间部分颠倒了。
应该是.Parameters.Add(string.Empty, "{//::}")
//
代表日期部分,::
代表时间部分。
不确定您的 SQL-VFP 插入语句,但您可能需要调整它并执行两次不同的插入。一个如果日期存在,另一个如果不存在。
对于没有日期的,我会硬输入以下内容(例如“?”是参数占位符)
insert into yourTable ( fld1, fld2,..., YourDateField ) values ( ?, ?, ..., ctot('') )
函数 CTOT() 表示字符到日期时间,空字符串将符合预期的 VFP Date/time 字段。
如果我没理解错的话,你不是在使用 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
可能是合适的. full list of OleDB types is documented here,但我不完全确定它们如何与 FoxPro 的数据类型对齐。