2017-02-02 13 views
1

私はデータベースから動的に入力されるウィンドウコンボボックスを持っています。Windowsコンボボックスの選択値に基づいて複数のテキストボックスを自動的に入力するにはどうすればよいですか?

次に、このコンボボックスから選択した値に基づいて自動的に入力するテキストボックスをいくつか表示します。

コンボボックスから値を選択すると、レコードが見つからず、テキストボックスにデータが入力されないという警告が表示され続けます。

私が間違っていることは何ですか?

Imports System.Data.SqlClient 

Public Class Form1 
    Dim conString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myDB;Integrated Security=True;;MultipleActiveResultSets=True" 
    Dim con As New SqlConnection(conString) 
    Dim cmd As New SqlCommand() 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 

     con.Open() 
     cmd.Connection = con 
     cmd.CommandText = "SELECT locId, name FROM Places" 
     Dim adpt As New SqlDataAdapter(cmd) 
     Dim dsn As New DataSet() 
     adpt.Fill(dsn) 
     con.Close() 

     ComboBox1.DisplayMember = "name" 
     ComboBox1.ValueMember = "LocID" 
     ComboBox1.DataSource = dsn.Tables(0) 
    End Sub 


    Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
     Try 
      con.Open() 
      Dim req As String = "SELECT locId, name FROM Places where locID = @locId" 
      Dim com As New SqlCommand(req, con) 
      'MessageBox.Show(req) 
      cmd.Parameters.AddWithValue("@locId", Convert.ToInt32(ComboBox1.SelectedValue)) 
      Dim dr As SqlDataReader = com.ExecuteReader() 
      If dr.Read() Then 
       txtLocationID.Text = dr.GetValue(0) 
       txtLocation.Text = dr.GetValue(1).ToString() 
      End If 
     Catch ex As Exception 
      MessageBox.Show("No records found") 
     Finally 
      con.Close() 
     End Try 
    End Sub 
End Class 

答えて

0

私はデータレディタを最初にループする必要があると思うので、データを取得することができます。試してみてください

Imports System.Data.SqlClient 

Public Class Form1 
    Dim conString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myDB;Integrated Security=True;;MultipleActiveResultSets=True" 
    Dim con As New SqlConnection(conString) 
    Dim cmd As New SqlCommand() 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load 

     con.Open() 
     cmd.Connection = con 
     cmd.CommandText = "SELECT locId, name FROM Places" 
     Dim adpt As New SqlDataAdapter(cmd) 
     Dim dsn As New DataSet() 
     adpt.Fill(dsn) 
     con.Close() 

     ComboBox1.DisplayMember = "name" 
     ComboBox1.ValueMember = "LocID" 
     ComboBox1.DataSource = dsn.Tables(0) 
    End Sub 


    Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
     Try 
      con.Open() 
      Dim req As String = "SELECT locId, name FROM Places where locID = @locId" 
      Dim com As New SqlCommand(req, con) 

      com.Parameters.AddWithValue("@locId", Convert.ToInt32(ComboBox1.SelectedValue)) ' You supposed to add parameters to instance of `com` object ' 
      Dim dr As SqlDataReader = com.ExecuteReader() 
      While dr.Read 
       txtLocationID.Text = dr(0) 
       txtLocation.Text = dr(1) 
      End While 
     Catch ex As Exception 
      MessageBox.Show("No records found") 
     Finally 
      con.Close() 
     End Try 
    End Sub 
End Class 
+0

同じ問題です。レコードが見つかりません – Tairoc

+0

この行をデータリーダーを初期化する際に既存のものに置き換えます Dim dr As SqlDataReader = com.ExecuteReader(Reader.CommandBehavior.CloseConnection) – hdkhardik

+0

ありがとうございますが、運はまだありません – Tairoc

関連する問題