0

次のコードに問題があります。

dim nama as string    
cnn.ConnectionString = "Server=localhost; user id=root; password=; database=aplikasi_store_testing;"
        cmd.Connection = cnn
        cnn.Open()
        cmd.CommandText = "SELECT ID_Barang, Nama_Barang from data_barang WHERE ID_Barang= '" & txtIDBarangInput.Text & "';"

その後、データを「Nama_Barang」から nama に変更する必要があります。誰でもこれで私を助けることができますか?事前に、あなたの貴重な助けに感謝します!

4

2 に答える 2

3

おそらく、コマンドを実行する必要があります

dim nama as string    
cnn.ConnectionString = "............"
cmd.Connection = cnn
cnn.Open()
cmd.CommandText = "SELECT ID_Barang, Nama_Barang from data_barang WHERE ID_Barang= @id"
cmd.Parameters.AddWithValue("@id", txtIDBarangInput.Text )
Dim reader  = cmd.ExecuteReader()
while reader.Read()
   nama = reader(1).ToString()
End While

もちろん、このコードは、接続とコマンド オブジェクトが既に宣言されていることを前提としています。
文字列の連結を削除し、パラメーターのプレースホルダーを配置したことにも注意してください。
これは、データベース エンジンに渡す文字列を作成するときに行うべき正しいことです。
このテーマについて読む ( Sql インジェクション)

ちなみに、ID_Barangすでに知っている の値を選択し直すのは無意味です。
また、この分野では疑問があります。質問コードでは、値を文字列として扱い、値を一重引用符で囲みます。しかし、名前ID_Barangは数値を示唆しています。このフィールドがテキストであることを確認しますか?

于 2013-04-30T14:37:44.447 に答える
0
cmd.CommandText = "SELECT Nama_Barang from data_barang WHERE ID_Barang = '" & txtIDBarangInput.Text & "';"

Dim o As Object = cmd.ExecuteScalar()

If (Not o.Equals(DBNull.Value)) Then
    nama = DirectCast(o, string)
Else
    name = string.Empty
End If

SQL インジェクションの脆弱性などを回避するために、id 値をクエリ文字列に直接挿入するのではなく、パラメーターを使用する必要があります。

于 2013-04-30T14:37:01.997 に答える