У меня была точно такая же проблема.Это было некоторое время назад, и я забыл точные детали, но проблема в том, что Pervasive.SQL использует & H0 (т. Е. Ноль) для представления отсутствующей даты, а & H0 недопустимо для поля даты в ODBC.
Мое решение состояло в том, чтобы преобразовать поле в строку в SQL, поэтому используйте это в своей QueryString: CONVERT (datefield, SQL_CHAR)
Затем я написал следующую функцию для преобразования ее обратно в дату (& H0 становитсяНовая дата):
''' <summary>
''' Enables a Btrieve Date column that contains 0x0 values to be accessed. Use 'SELECT CONVERT(datefield, SQL_CHAR)' to access the field, then this function to convert the result back to a date. A New Date is returned if the record has a 0x0 date
''' </summary>
''' <param name="Expression"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function SQL_CHAR2Date(ByVal Expression As String) As Date
'check Expression is in the correct format
Dim strMap As String = ""
For i As Integer = 0 To Expression.Length - 1
Select Case Expression.Substring(i, 1)
Case "0" To "9" : strMap &= "0"
Case "-" : strMap &= "-"
Case Else : strMap &= Expression.Substring(i, 1)
End Select
Next i
Select Case strMap
Case "0000-00-00"
Case Else
Throw New ApplicationException("SQL_CHAR2Date: invalid input parameter")
End Select
Dim y As Integer = CInt(Expression.Substring(0, 4))
Dim m As Integer = CInt(Expression.Substring(5, 2))
Dim d As Integer = CInt(Expression.Substring(8, 2))
If y = 0 And m = 0 And d = 0 Then
Return New Date
Else
Return DateSerial(y, m, d)
End If
End Function