2016-07-19 9 views
0

これをデバッグすると、無効な列名エラー(「オブジェクトの名前」)が表示されます。私はSQLデータベースを使用しています。vb.net OleDbDataAdapterが動作しませんSelect From Where

Protected Sub ddlKunden_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlKunden.SelectedIndexChanged 
    Dim strSql As String 
    Dim kontakt As String = ddlKunden.SelectedItem.Value 
    Dim dtbP As DataTable 
    Using connection As OleDbConnection = New OleDbConnection(strConnection) 
     connection.ConnectionString = strConnection 
     connection.Open() 

     'Kontaktpersonen laden 
     strSql = "SELECT * FROM Kontaktpersonen WHERE Nr =" & Chr(34) & kontakt & Chr(34) 

     dtbP = New DataTable() 
     Using dad As New OleDbDataAdapter(strSql, connection) 
      dad.Fill(dtbP) 
     End Using 
     ddlKontaktperson.Items.Clear() 
     ddlKontaktperson.DataSource = dtbP 
     ddlKontaktperson.DataTextField = "AP_Nam" 
     ddlKontaktperson.DataValueField = "ID" 
     ddlKontaktperson.DataBind() 
    End Using 

    ddlKontaktperson.Visible = True 

End Sub 

エラーが

dad.fill(dtbP) 

でそれがNR =「選択した値」とあなたがドロップダウンリストで選択したすべての行を選択する必要がありポップ。これらの行はすべてデータテーブルに保存し、別のドロップダウンリストで使用する必要があります。

私はどこでもまったく同じことをしようとすると動作します。
例:

'Kunden laden 
      strSql = "SELECT * FROM Kontakte" 
      dtbK = New DataTable() 
      Using dad As New OleDbDataAdapter(strSql, connection) 
       dad.Fill(dtbK) 
      End Using 
      ddlKunden.Items.Clear() 
      ddlKunden.DataSource = dtbK 
      ddlKunden.DataTextField = "Nr" 
      ddlKunden.DataValueField = "Nr" 
      ddlKunden.DataBind() 

答えて

0

周りのあなたのSQLコマンドは、 ちょうどその値とのOleDbCommandのパラメータとして、これらの値を追加し、それ以外の場合は を入力しますパラメーター「'」あなたが使用する必要はありません。次のコード を試してみてくださいSQLインジェクションに脆弱である

Dim strConnection As String = "Provider=sqloledb;Data Source=(local);" & 
           "Initial Catalog=kodyaz;" & 
           "User Id=sa;Password=sa" 

Dim kontakt As Int32 = 1 

Dim dtbP As DataTable 

Using connection As OleDbConnection = New OleDbConnection(strConnection) 
    connection.Open() 

    Dim cmd As New OleDbCommand() 
    cmd.Connection = connection 
    cmd.CommandText = "SELECT * FROM Kontaktpersonen WHERE Nr = ?" 
    cmd.Parameters.AddWithValue("Nr", kontakt) 

    dtbP = New DataTable() 
    Using dad As New OleDbDataAdapter(cmd) 
     dad.Fill(dtbP) 
    End Using 

End Using 
+0

これは機能します!ありがとう!私のコードがうまくいかなかった理由を教えてください。 – Sorx

+0

コマンドは、Nr個= 1 以下が許容されるKontaktpersonen FROM => SELECT *なければならない=> SELECT * Nr個の= '1' が、以下のSQLエンジンKontaktpersonen WHERE NrとFROM構文上=> SELECT *にエラーが発生しWHERE Kontaktpersonen FROM = "1" – Eralper

+0

おそらくコードは=> strSql = "SELECT * FROM Kontaktpersonen WHERE Nr ="&kontakt – Eralper

関連する問題