как получить данные в текстовое поле из базы данных

У меня есть форма с одним полем со списком и текстовым полем, а также база данных 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.


person MUKESH    schedule 26.04.2011    source источник
comment
Я хочу заставить их увидеть, что я могу сделать, сэр   -  person MUKESH    schedule 26.04.2011


Ответы (3)


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

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

person AllenG    schedule 26.04.2011
comment
можете ли вы написать код для его выполнения скаляра для этого плз, и я установил точку останова для того, чтобы сбалансировать его нуль, так что только вы можете помочь, мне нужно прочитать только одни данные, которые соответствуют выбранному клиенту, плз, можете ли вы изменить приведенный выше код, как вы знай плз.. - person MUKESH; 26.04.2011
comment
Я не пишу на VB, может быть, кто-нибудь из других умников сможет помочь с реальным кодом. Вы также можете посмотреть на веб-сайте msdn «SqlCommand.ExecuteScalar». Это, вероятно, укажет вам правильное направление. - person AllenG; 26.04.2011

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

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


TextBox1.Text = sdr.GetString(yourColumnIndex) 

ComboBox1.SelectedText возвращает выделенный (выбранный) текст в файле ComboBoxControl. Это будет пустым, если вы не использовали мышь, чтобы выбрать часть его текста или не удерживали Shift, пока вы нажимаете клавиши направления на клавиатуре. Вероятно, именно поэтому ваш запрос возвращает НОЛЬ ЗАПИСЕЙ.

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

Dim ST As String = ComboBox1.SelectedItem.Text 
person Akram Shahda    schedule 26.04.2011
comment
я использовал combobox.selecteditem.text, но он показывает ошибку, мы не можем изменить значение data.row на строку - person MUKESH; 26.04.2011
comment
Я подал заявку, можете ли вы сделать одну услугу, можете ли вы попробовать сейчас у себя дома, и, пожалуйста, посмотрите - person MUKESH; 26.04.2011
comment
нет, сэр, я все еще не могу найти какое-либо решение, помогите мне, пожалуйста ........ мне нужно закончить мой проект, я пробовал искать в сети, я не могу понять, пожалуйста, помогите мне - person MUKESH; 26.04.2011
comment
нет ошибки, он не показывает никакого значения в tat vb.net из текстового поля - person MUKESH; 26.04.2011
comment
Сэр, вы не можете попробовать это там сейчас и посмотреть, плз......... как друг, сделайте мне одолжение, плз, сэр. - person MUKESH; 26.04.2011
comment
Я не могу, потому что у меня не такая среда, как у вас... Попробуйте поставить несколько точек останова.. - person Akram Shahda; 26.04.2011
comment
я держал, сэр, но он не отображается, если это произошло, попробуйте что-нибудь, моя проблема все еще в том, что текстовое поле пусто, ничего не происходит в текстовом поле, сэр. - person MUKESH; 26.04.2011
comment
Отредактируйте свой вопрос и замените старый код новым кодом, который вы используете сейчас, и мы посмотрим. - person Akram Shahda; 26.04.2011

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

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

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

sdr = sqlcmd.ExecuteReader()

к чему-то вроде

Dim s как String = sqlcmd.ExecuteScalar()

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

person Gregory A Beamer    schedule 26.04.2011
comment
можете ли вы написать код для его выполнения скаляра для этого плз, и я установил точку останова для того, чтобы сбалансировать его нуль, так что только вы можете помочь, мне нужно прочитать только одни данные, которые соответствуют выбранному клиенту, плз, можете ли вы изменить приведенный выше код, как вы знай плз...... - person MUKESH; 26.04.2011