Свойство ExecuteReader CommandText не было должным образом инициализировано

Прежде всего извините, если часть кода неверна. Я все еще новичок в использовании sql на vb.net

У меня есть следующий код:

Imports MySql.Data.MySqlClient
Imports System.Data.SqlClient

Public Class Form1

    Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
        Dim objConn As MySqlConnection
        Dim objDataset As New DataSet
        Dim objDataAdapter As MySqlDataAdapter
        Dim myCommand As MySqlCommand

        Dim sqlConn As String

        objConn = New MySqlConnection("server=localhost;userid=root;database=attendance_system")
        myCommand = objConn.CreateCommand

        objConn.Open()
        Dim objReader As MySqlDataReader = myCommand.ExecuteReader

        sqlConn = "SELECT student_name FROM profile"
        objDataAdapter = New MySqlDataAdapter(sqlConn, objConn)
        objDataAdapter.Fill(objDataset, "profile")

        MsgBox("The Connection is Now 'OPEN'")

        objReader.Read()

        TextBox1.Text = objReader("student_name")

        objReader.Close()
        objConn.Close()
    End Sub
End Class

Я использую коннектор MySQL через vb.net в phpmyadmin и установил базу данных с записями. Строка подключения работает, но моя проблема в том, что когда я пытаюсь нажать кнопку для загрузки данных в текстовое поле, я продолжаю получать:

Свойство CommandText не было должным образом инициализировано».

Ошибка в этой строке:

"Dim objReader As MySqlDataReader = myCommand.ExecuteReader"

Я пробовал много исправлений, которые я нашел на этом сайте, а также на других.


person ECATech    schedule 07.09.2012    source источник
comment
Вероятно, лучше удалить строку Imports System.Data.SqlClient, если вы не используете MS SQL Server. В противном случае есть вероятность, что вы где-то получите неправильную информацию (непреднамеренное разрешение имени).   -  person Andrew Morton    schedule 19.01.2016


Ответы (2)


Это проблема:

Dim objReader As MySqlDataReader = myCommand.ExecuteReader

sqlConn = "SELECT student_name FROM profile"

Вы объявляете SQL после попытки выполнить запрос (и даже тогда вы не устанавливаете его как SQL для команды). Как вы ожидаете, что это сработает? Кроме того, sqlConn — очень странное имя для переменной, объявляющей SQL — я ожидаю, что это будет соединение.

Похоже, вы пытаетесь смешивать слишком разные способы получения данных:

  • Чтение непосредственно из ридера
  • Заполнение DataSet адаптером данных

Не стоит их так смешивать. Решите, что вы на самом деле хотите сделать, удалите весь код, относящийся к другому стилю, а затем убедитесь, что вы делаете все в разумном порядке.

person Jon Skeet    schedule 07.09.2012
comment
Спасибо за прямой ответ. Я действительно новичок в этом деле, и мне определенно нужна помощь. Я попробую еще раз и посмотрю, что я могу придумать на основе вашего предложения. Спасибо. - person ECATech; 08.09.2012

Из класса MySqlCommand и пример, приведенный как

Public Sub ReadMyData(myConnString As String)
  Dim mySelectQuery As String = "SELECT * FROM Test.Dept"
  Dim myConnection As New MySqlConnection(myConnString)
  Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
  myConnection.Open()
  Dim myReader As MySqlDataReader = myCommand.ExecuteReader()
  Try
    While myReader.Read()
      Console.WriteLine(myReader.GetInt32(0).ToString() + ", " _
        + myReader.GetString(1))
    End While
  Finally
      ' always call Close when done reading.
      myReader.Close()
      ' always call Close when done with connection.
      myConnection.Close()
  End Try
End Sub

В вашем объекте команды отсутствует оператор выбора.

person Adriaan Stander    schedule 07.09.2012
comment
Было бы проще использовать операторы Using - интересно, был ли этот пример написан из первой версии VB.NET, в которой не было Using... - person Jon Skeet; 07.09.2012
comment
Это кажется справедливым, быстренько посмотрю X-) - person Adriaan Stander; 07.09.2012