0

MSSQLデータベースにクエリを実行し、それらの結果をリストボックスに表示する小さなVBアプリケーションを構築しています。ユーザーがデータベース内のCharNameを選択するために使用されるCharNameを入力して、そのユーザーのみの結果を返すTextBox(TextBox1)があります。現在、SQLクエリをButton1にコーディングしています。

したがって、私が助けを必要としているのは、TextBox1から入力を取得し、SQLクエリのChars.CharNameをユーザー指定の入力に置き換えて、ボタンがクリックされたときにクエリが実行され、ListBox1に結果が入力されるようにすることです。

ところで、私はVBの完全な初心者です(明らかに)。

私がこれまでに持っているコードは次のとおりです。

Public Class Form1

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

    End Sub

    Private Sub TextBox1_Text(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim sqlquery As String
        sqlquery = ("SELECT Chars.CharName, CharItems.Type, CharItems.TypeID,  CharItems.ItemName, CharItems.Bag, CharItems.Slot, CharItems.ItemUID, CharItems.Craftname, CharItems.Gem1, CharItems.Gem2, CharItems.Gem3, CharItems.Gem4, CharItems.Gem5, CharItems.Gem6 FROM Chars INNER JOIN CharItems ON Chars.CharID = CharItems.CharID WHERE ([CharName] = '" + TextBox1.Text + "'")

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

    End Sub
End Class
4

3 に答える 3

1

接続を行い、データベースから結果をフェッチしてに保存する必要がありますDatatable。その後、にバインドできますDatatableListBox

于 2013-01-17T21:02:26.823 に答える
0

の値を設定するときに文字列リテラルを角かっこで囲む必要はなくsqlquery、そこにもタイプミスがあります。

それはただあるべきです

Dim sqlquery As String
sqlquery = "SELECT Chars.CharName, CharItems.Type, CharItems.TypeID, CharItems.ItemName, CharItems.Bag, CharItems.Slot, CharItems.ItemUID, CharItems.Craftname, CharItems.Gem1, CharItems.Gem2, CharItems.Gem3, CharItems.Gem4, CharItems.Gem5, CharItems.Gem6 FROM Chars INNER JOIN CharItems ON Chars.CharID = CharItems.CharID WHERE [CharName] = '" + TextBox1.Text + "'"

このアプローチにはSQLインジェクションの問題全体がありますが、ここでは取り上げたくありませんが、入力をパラメーター化できるように、生のSQLではなくストアドプロシージャの実行についてよく読んでください。

于 2013-01-17T21:04:45.627 に答える
0

VBの男ではないので、これは私の頭から離れています。ただし、コメントには注意してください

'put these at the top of your code file:
imports System.Data.SqlClient
imports System.Data

'and this in the Button1_Click:
dim sql as string
dim cname as string
cname=TextBox1.Text


'never just directly accept the input from a textbox, etc, into an SQL query. Always use a parameter so prevent SQL Injection attacks.
  sqlquery="SELECT Chars.CharName, CharItems.Type, CharItems.TypeID,CharItems.ItemName,CharItems.Bag, CharItems.Slot, CharItems.ItemUID, CharItems.Craftname, CharItems.Gem1, CharItems.Gem2, CharItems.Gem3, CharItems.Gem4, CharItems.Gem5, CharItems.Gem6 FROM Chars INNER JOIN CharItems ON Chars.CharID = CharItems.CharID WHERE Chars.CharName = @CharName" 


using connection as SqlConnection = new SqlConnection(ConnectionString) 'substitute ConnectionString for the connection string to your database, where you get this from is beyond the scope of this code but it should be somewhere secure i.e app.config ConnectionStrings section
connection.Open()
using comm as SqlCommand = new SqlCommand(query,conn)
dim p as SqlParameter = new SqlParameter("CharName",cname)
comm.Parameters.Add(p)
dim rs as SqlDataReader = comm.ExecuteReader
dim dt as DataTable = new DataTable
dt.Fill(rs)
end using 'comm
end using 'conn

ListBox1.DisplayMember="CharName"
ListBox1.DataSource=dt
ListBox1.DataBind()
于 2013-01-17T21:16:06.870 に答える