VB-SQL, Исключение в операторе SELECT - PullRequest
0 голосов
/ 03 марта 2012

Импортирует System.Data.SqlClient

Открытая форма класса 3

Private cs As New SqlConnection("Data Source=HUSAIN-PC;Initial 

Каталог = final1; Интегрированная безопасность = True ")

Private da As New SqlDataAdapter
Private ds As New DataSet
Public dr As SqlDataReader
Public cmd As New SqlCommand
Private sql As String
Private sqlsel As String
Dim Bal As String
Dim id As String
Dim amt As String

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    cs.Open()
    cmd.Connection = cs
    amt = TextBox2.Text
    id = TextBox1.Text
    sqlsel = "SELECT (Bal) FROM db5 WHERE Id='" + id + "'"
    da.InsertCommand = New SqlCommand(sqlsel, cs)
    dr = cmd.ExecuteReader
    If dr.HasRows = True Then
        While (dr.Read())
            Bal = dr("Id")
        End While
    End If
    dr.Close()
    MessageBox.Show("Balance is :" + Bal)

    Dim total As String = Bal + amt

    sql = "UPDATE db5 SET Bal='" + total + "' WHERE Id='" + id + "'"
    da.InsertCommand = New SqlCommand(sql, cs)
    da.InsertCommand.ExecuteNonQuery()
    MessageBox.Show("updated")
End Sub

Конечный класс

Это мой VB-код для извлечения значения из базы данных SQL ... Оператор Update работает нормально, когда я пишу выбор, я получаю исключение в коде: dr = cmd.ExecuteReader "ExecuteReader: CommandText свойствоне был инициализирован "

1 Ответ

0 голосов
/ 03 марта 2012

Посмотрите на этот код:

sqlsel = "SELECT (Bal) FROM db5 WHERE Id='" + id + "'"
da.InsertCommand = New SqlCommand(sqlsel, cs)
dr = cmd.ExecuteReader

Вы указываете InsertCommand как запрос SELECT, но затем вы вызываете ExecuteReader для совершенно отдельного SqlDataReader ... которыйне настроен запрос согласно сообщению об ошибке.

Вот почему вы получаете эту конкретную ошибку, но есть много проблем с этим кодом:

  • Вы должны создавать новый SqlConnection / SqlCommand и т. Д. Каждый раз, когда вы хотите выполнить запрос
  • Вы должны использовать операторы Using для их автоматического закрытия
  • У вас не должно быть экземпляра переменных для них - они должны быть локальными переменными
  • Я не вижу смысла использовать DataAdapter здесь, в первую очередь - просто используйте SqlCommand.ExecuteNonQuery
  • Очень важно : Вы должны использовать параметризованный SQL вместо того, чтобы включать значения непосредственно в ваш SQL.Посетите сайт Bobby Tables для получения дополнительной информации по этой теме.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...