【问题标题】:specified cast is not valid VB.Net指定的强制转换无效 VB.Net
【发布时间】:2020-04-27 07:35:57
【问题描述】:

下面的子程序有问题。

它的目的是找到一个值(在本例中为日期),并将其与todaysdate 进行比较。如果在DateAscending 中找到日期的一个位置,则将dateexists 设置为true。

执行if语句时出现错误“'Specified Cast is not valid'”。

我之前使用过相同的例程,找到一个字符串的用户名,todaysdate 然而是一个date - 所以我 99% 确定问题与数据类型有关,但我不知道如何解决它。

vairibale getconn 保存连接字符串。

tablename 是具有正确表名的字符串。

        Dim todaysdate As Date = Today
        Dim dateexists As Boolean = False
        Using connection As New OleDbConnection(getconn)
            connection.Open()
            Dim sql = "SELECT DateAscending FROM " & tablename
            Dim finddate As New OleDbCommand(sql, connection)
            Dim reader As OleDbDataReader = finddate.ExecuteReader()
            While reader.Read()
                If todaysdate = CDate(reader.GetString(0)) Then 'Error occurs here
                    dateexists = True
                End If
            End While
            reader.Close()
            connection.Close()
      End Using

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    第 0 列中日期的字符串表示形式如何?好像字符串不能转换成日期。

    这个任务也应该通过这样的 SELECT COUNT(*) 语句来完成:

    Dim sql As String = "SELECT COUNT(*) FROM " & tablename
    sql &= " WHERE DateAscending ='" & Strings.Format(todaysdate, "YourFormat") & "'"
    
    Dim Cmd As New OleDbCommand(sql, connection)
    dateexists = CInt(Cmd.ExecuteScalar()) > 0
    

    将“YourFormat”替换为您在此列中的日期格式。您将在此处找到 Format 函数的一些示例:

    https://docs.microsoft.com/de-de/dotnet/api/microsoft.visualbasic.strings.format?view=netcore-3.1

    【讨论】:

    • 列名是 DateAscending。格式均为**/**/****,列的数据类型为日期/时间。所有值首先作为 vb 日期输入到表中。
    • 试试 reader.GetDateTime 方法而不是 GetString 怎么样?
    • 如果你想使用 SELECT COUNT(*) 语句,MS Access 的格式为 "\#yyyy-MM-dd\#" 和 "\'yyyy-MM-dd\' " 用于 SQL Server。对于其他数据库服务器,会有类似的格式字符串。但重要的是:您必须省略参数周围的 ',因为它不是字符串,而是时间文字。
    • 所以第二行会显示为 Access 的 like this: sql &= " WHERE DateAscending = " & Strings.Format(todaysdate, "\#yyyy-MM-dd\#")
    • 感谢您的帮助,我已将 reader.GetString(0) 编辑为 reader.GetDateTime(0),并且效果很好。现在对我来说很有意义,但我会牢记在心。
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2014-07-30
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多