как получить данные в текстовое поле из базы данных - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть форма с одним полем со списком и текстовым полем, и база данных SQL с именем balance с двумя столбцами;один как customername, а другой как obbalance.Я связал все имя клиента с полем со списком, и теперь мне нужно, чтобы, когда пользователь выбирает имя клиента из поля со списком, в текстовом поле должен отображаться разбалансированность выбранного customername;здесь имя клиента не будет повторяться - только одно имя на клиента.Что я могу сделать?Пожалуйста, помогите мне.

Dim conectionstring As String
    conectionstring = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\SHOPPROJECT\SHOPPROJECT\shop.mdf;Integrated Security=True;User Instance=True"


    Dim ST As String = ComboBox1.SelectedText

    Dim sqlcon As New SqlConnection(conectionstring)

    Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME =  " & " '" & ST & "'" & "", sqlcon)
    MessageBox.Show(TextBox1.Text)


    Dim result As Object

    Try
        sqlcon.Open()
        ' Dim sdr As SqlDataReader = sqlcmd.ExecuteReader()
        result = sqlcmd.ExecuteScalar()

        If result IsNot Nothing Then
            TextBox1.Text = result.ToString()
            MessageBox.Show(TextBox1.Text)

        End If

    Catch ex As SqlException
        MessageBox.Show(ex.Message)

    End Try
End Sub

Я пробовал это, но я не вижу значения в текстовом поле, а obbalance - это значение с плавающей запятой из базы данных SQL.

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Внесите следующие изменения:

Dim sqlcmd As New SqlCommand("SELECT OBBALANCE FROM BALANCE WHERE CUSTOMERNAME = '" & ST & "'", sqlcon)


TextBox1.Text = sdr.GetString(yourColumnIndex) 

ComboBox1.SelectedText возвращает выделенный (выделенный) текст на ComboBoxControl. Это будет пустым, если вы не используете мышь, чтобы выделить часть текста или удерживайте Shift, пока вы нажимаете клавиши со стрелками на клавиатуре. И именно поэтому ваш запрос возвращает ZERO RECORDS .

Вместо этого используйте следующее:

Dim ST As String = ComboBox1.SelectedItem.Text 
1 голос
/ 26 апреля 2011

Если вы обновляете текстовое поле, это единственный результат (скалярное значение)? Если это так, первое, что я бы сделал, это использую ExecuteScalar, а не ExecuteReader. Затем используйте режим отладки с точками останова, чтобы получить лучшее представление о том, что на самом деле происходит. Возможно, вы просто не получаете никаких результатов.

Примечание: я предполагаю, что плохая практика кодирования (встроенный оператор SQL, жестко запрограммированная строка подключения и т. Д.) Для ясности. Если это не так, исправьте их.

1 голос
/ 26 апреля 2011

Установите точку останова и убедитесь, что вы получаете значение для OBBALANCE (посмотрите, если вы получаете какие-либо строки, период может быть хорошим).Кроме того, убедитесь, что вы можете получить только одну строку во время итерации вперед, даже если вам нужно только одно значение.

Еще лучше, рассмотрим ExecuteScalar, который возвращает только одно значение.Пока вы это делаете, настройте параметры SQL-запроса, чтобы не вводить SQL-запрос.

ОБНОВЛЕНИЕ: просто измените его здесь:

sdr = sqlcmd.ExecuteReader ()

что-то вроде

Dim s as String = sqlcmd.ExecuteScalar ()

Затем используйте s в качестве значения текстового поля.Возможно, вам придется ToString () значение или иным образом привести в качестве строки, так как я считаю, что ExecuteScalar () возвращает объект.

...