Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 年、月和日参数描述如何忽略不可表示的日期时间_Vb.net_Visual Studio 2010_Ado.net_Odbc_Pervasive Sql - Fatal编程技术网

Vb.net 年、月和日参数描述如何忽略不可表示的日期时间

Vb.net 年、月和日参数描述如何忽略不可表示的日期时间,vb.net,visual-studio-2010,ado.net,odbc,pervasive-sql,Vb.net,Visual Studio 2010,Ado.net,Odbc,Pervasive Sql,我使用ODBC从普及的PSQL数据库读取数据,在某些情况下,日期列可以包含00/00/0000日期。我真的不关心无效日期,所以有没有什么方法可以将所有这些不可表示的日期转换为Null或某个特定日期,而不是查询失败 编辑: 下面显示了我正在使用的代码及其失败之处: Private _connODBC As OdbcConnection Dim dt As New DataTable _connODBC = New OdbcConnection(txtConnectionString.Text)

我使用ODBC从普及的PSQL数据库读取数据,在某些情况下,日期列可以包含00/00/0000日期。我真的不关心无效日期,所以有没有什么方法可以将所有这些不可表示的日期转换为Null或某个特定日期,而不是查询失败

编辑:

下面显示了我正在使用的代码及其失败之处:

Private _connODBC As OdbcConnection

Dim dt As New DataTable
_connODBC = New OdbcConnection(txtConnectionString.Text)
_connODBC.Open()

Dim dataadapter = New OdbcDataAdapter(QueryString, _connODBC)
dataadapter.Fill(dt) '<--- This line throws the unrepresentable date time error
_connODBC.Close()
Private\u连接ODBC作为ODBC连接
Dim dt作为新数据表
_connODBC=新的OdbcConnection(txtConnectionString.Text)
_connobc.Open()
Dim dataadapter=新的OdbcDataAdapter(查询字符串,_conndODBC)
dataadapter.Fill(dt)您可以使用日期时间-如果该值无效,请将其设置为
null
Nothing
),否则设置为日期

MyDate as Nullable(Of DateTime)

间接地说,如果您将其导入文本字段而不是日期,那么在以后的步骤中,您可以根据需要识别和修改文本值。

我遇到了完全相同的问题。那是很久以前的事了,我忘记了确切的细节,但问题是,perversal.SQL使用&H0(即零)表示缺少的日期,但是&H0对于ODBC中的日期字段无效

我的解决方案是将该字段强制转换为SQL中的字符串,因此在QueryString:CONVERT(datefield,SQL\u CHAR)中使用它

然后,我编写了以下函数将其转换回日期(&H0变为新日期):

“”
''启用包含要访问的0x0值的Btrieve Date列。使用“选择转换(日期字段,SQL_CHAR)”访问该字段,然后使用此函数将结果转换回日期。如果记录的日期为0x0,则返回新日期
''' 
''' 
''' 
''' 
公共函数SQL_CHAR2Date(ByVal表达式为字符串)作为日期
'检查表达式的格式是否正确
Dim strMap As String=“”
对于i作为整数=0的表达式,长度为-1
选择大小写表达式。子字符串(i,1)
案例“0”到“9”:strMap&=“0”
案例“-”:strMap&=“-”
Case-Else:strMap&=Expression.Substring(i,1)
结束选择
接下来我
选择案例strMap
案例“0000-00-00”
其他情况
抛出新的ApplicationException(“SQL\u CHAR2Date:无效的输入参数”)
结束选择
Dim y作为整数=CInt(表达式.子字符串(0,4))
Dim作为整数=CInt(表达式.子字符串(5,2))
作为整数的Dim d=CInt(表达式.子字符串(8,2))
如果y=0,m=0,d=0,则
返回新日期
其他的
返回日期序列(y、m、d)
如果结束
端函数

@SSS让我想到这可以在查询中完成,尽管这有点冗长:

SELECT CASE CONVERT([updated date], SQL_CHAR) 
WHEN '0000-00-00' THEN NULL 
ELSE [updated date] END 
AS [updated date] FROM fingerscans

虽然我想要一个解决方案,但这并不依赖于我在阅读数据库时必须记住这样做

我的问题是如何捕捉错误以确定它是无效的-请查看我的代码示例添加到初始问题中哦,那是很久以前的事了。。。我认为ArgumentException已经被弃用了。。。我想把它改为InvalidOperationException。理想情况下,我们需要一个不需要更改SQL查询的解决方案。而是截取发生在
dataadapter.Fill(dt)
@CrazyTim行上的错误-我同意,但还没有人提出解决方案…还没有
SELECT CASE CONVERT([updated date], SQL_CHAR) 
WHEN '0000-00-00' THEN NULL 
ELSE [updated date] END 
AS [updated date] FROM fingerscans