Проверяем, существует ли таблица, но она не работает, появляется ошибка «Значение не может быть нулевым. Имя параметра: dataTable» - PullRequest
0 голосов
/ 26 мая 2020

Проверка, существует ли таблица, но она не работает: получение ошибки «Значение не может быть нулевым. Название параметра: dataTable ».

вот код

Sub TABLES_CHK()
    Try
        tbl_lbl.Text = "TABLES EXISTS: " & DoesTABLEExist("server=localhost; username=root; password=*****; database=*****;")
        If DoesTABLEExist("server=localhost; username=root; password=*****; database=*****;") = False Then
            Exit Sub
            Using CON As New MySqlConnection("server=localhost; username=*****; password=*****;  database=*******;")
                Using adapter As New MySqlDataAdapter("CREATE TABLE `airtech_db`.`employees`(" &
            "`Employee_ID` INT Not NULL AUTO_INCREMENT,`Name` VARCHAR(45) NULL,FATHER_NAME VARCHAR(45) NULL," &
            "DOB VARCHAR(45) NULL,DOJ VARCHAR(45) NULL,POSITION VARCHAR(45) NULL,EMP_STATUS VARCHAR(45) NULL," &
            "SALARY VARCHAR(45) NULL,EOS VARCHAR(45) NULL,REMARKS VARCHAR(45) NULL," &
            "PRIMARY KEY(`Employee_ID`))", CON)
                    CON.Open()
                    Dim dt As New DataTable
                    adapter.Fill(dt)
                    CON.Close()
                End Using
            End Using
        End If
        tbl_lbl.Text += " -TABLES CREATED: " & DoesDBExist("server=localhost; username=root; password=*****;")
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
Function DoesTABLEExist(DBConnectionString As String) As Boolean
    Try
        Dim conn As MySqlConnection = New MySqlConnection(DBConnectionString)
        Dim ADAPTER As New MySqlDataAdapter("Select * From information_schema.tables" &
                                 " Where table_schema = 'airtech_db' And table_name = 'employees' LIMIT 1;", conn)
        Dim DT As DataTable, TABLECHK As Boolean

        conn.Open()
        ADAPTER.Fill(DT)
        MsgBox(DT.Rows.Count)
        If DT.Rows.Count > 0 Then
            TABLECHK = True
        Else
            TABLECHK = False
        End If
        conn.Close()
        Return TABLECHK
    Catch ex As Exception

            MsgBox(ex.Message)
        End If
    End Try
End Function

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Временно удалите Try, чтобы вы могли видеть, какая строка вызывает ошибку.

Объекты базы данных, которые предоставляют метод .Dispose, ожидают, что он будет вызван, потому что они могут использовать неуправляемые ресурсы, которые нуждаются в будет выпущен. Это происходит в их методе .Dispose. Блок Using...End Using сделает это за вас, даже если есть ошибка.

Нет необходимости создавать DataAdapter или DataTable. Не извлекайте с сервера данные, которые вам не нужны. Вам нужен только счет. Используйте .ExecuteScalar, который возвращает первый столбец первой строки набора результатов как объект.

Function DoesTABLEExist(DBConnectionString As String) As Boolean
    Dim RetVal As Integer
    Using conn As New MySqlConnection(DBConnectionString),
           cmd As New MySqlCommand("Select Count(*) From information_schema.tables
                                    Where table_schema = 'airtech_db' 
                                    And table_name = 'employees';", conn)
        conn.Open()
        RetVal = CInt(cmd.ExecuteScalar())
    End Using
    Dim TABLECHK As Boolean
    If RetVal > 0 Then
        TABLECHK = True
    Else
        TABLECHK = False
    End If
    Return TABLECHK
End Function
0 голосов
/ 26 мая 2020

, чтобы проверить, существует ли уже таблица, этот код работал отлично

Sub TABLES_CHK()
    Dim CON_STRING As String
    CON_STRING = "server=localhost; username=root; password=****; database=****;"
    Try
        tbl_lbl.Text = "TABLES EXISTS: " & DoesTABLEExist(CON_STRING)
        If DoesTABLEExist(CON_STRING) = False Then
            Using CON As New MySqlConnection(CON_STRING)
                Using adapter As New MySqlDataAdapter("CREATE TABLE `airtech_db`.`employees`(" &
            "`Employee_ID` INT Not NULL AUTO_INCREMENT,`Name` VARCHAR(45) NULL,FATHER_NAME VARCHAR(45) NULL," &
            "DOB VARCHAR(45) NULL,DOJ VARCHAR(45) NULL,POSITION VARCHAR(45) NULL,EMP_STATUS VARCHAR(45) NULL," &
            "SALARY VARCHAR(45) NULL,EOS VARCHAR(45) NULL,REMARKS VARCHAR(45) NULL," &
            "PRIMARY KEY(`Employee_ID`))", CON)
                    CON.Open()
                    Dim dt As New DataTable
                    adapter.Fill(dt)
                    CON.Close()
                End Using
            End Using
            tbl_lbl.Text += " -TABLES CREATED: " & DoesDBExist(CON_STRING)
        Else
            tbl_lbl.Text += " -TABLES CREATED: False"
        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
Function DoesTABLEExist(DBConnectionString As String) As Boolean

    Try
        Dim conn As MySqlConnection = New MySqlConnection(DBConnectionString)
        ' Dim ADAPTER As New MySqlDataAdapter("Select * From information_schema.tables" &
        '                         " Where table_schema = 'airtech_db' And table_name = 'employees' LIMIT 1;", conn)
        Dim cmd As New MySqlCommand("Select * From information_schema.tables Where table_schema = 'airtech_db' And table_name = 'employees' LIMIT 1;", conn)


        conn.Open()
        Dim bRet As Boolean = False
        Dim reader As MySqlDataReader = cmd.ExecuteReader
        bRet = reader.HasRows
        If (bRet = True) Then
            'MsgBox("Table Exists")
        Else
            ' MsgBox("No more records")
        End If
        conn.Close()
        Return bRet

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Function
...