2012-01-01 6 views
0

SQL文を使ってレコードを正常に取得するには、テキストボックス、ドロップダウンリスト&のラベルを適切なフィールドに正しく割り当てることができますか?私は4つのテーブル&を持っているので、割り当てられたデータはコントロールと一致しません。 (VS2008)私は以下の持っているコントロールにデータを正しく割り当て、SQL Server、VS2008

myCmd.CommandText = "SELECT pc.product_category_id, pc.product_category_name, pi.product_image_id, pi.product_image_filename, qr.qrcode_id, qr.qrcode_image_filename, p.product_author FROM Product AS p INNER JOIN ProductCategory AS pc ON p.product_category_id = pc.product_category_id INNER JOIN ProductImage AS pi ON p.product_image_id = pi.product_image_id INNER JOIN QRCode AS qr ON p.qrcode_id = qr.qrcode_id WHERE p.product_id = '" & DropDownList2.Text & "'" 

myCmd.Parameters.Add(New SqlParameter("@product_id", (DropDownList2.Text))) 
myConn.Open() 
'run the query and obtain a reader to get the results 
dtrReader = myCmd.ExecuteReader() 

'check if there are results 
If (dtrReader.Read()) Then 
    'populate the values of the controls 
    lblProductID2.Text = dtrReader(0) 
    txtProductName2.Text = dtrReader(4) 
    txtProductTitle2.Text = dtrReader(7) 
    txtProductDescription2.Text = dtrReader(8) 
    txtProductAuthor2.Text = dtrReader(12) 
+0

あなたはSQLインジェクションの脆弱性を持っています。 – SLaks

+0

@SLaks:どこから来ているのか分かります。ありがとうございますが、質問には、フィールドに一致するためのより簡単な方法がありますか? – brainsfrying

+0

既存のコードについて間違っているか不十分ですか? – MatBailie

答えて

0

これを解決するには、少なくとも2つの方法があります。

:DataReaderオブジェクトから取得する際に

1)明示的に列の名前を使用するには

lblProductID2.Text = dtrReader("product_category_id") 
' etc 

2)リーダー内の各フィールドを循環させ、値を割り当てるためにcase文を使用する

それはそれが簡単に返されたデータにはDBNull値をテストすることができますので、
For nI As Integer = 0 To dtrReader.FieldCount - 1 
    Select Case dtrReader.GetName(nI).ToLower() 
     Case "product_category_id" 
     If Not dtrReader.IsDBNull(nI) Then 
      lblProductID2.Text = dtrReader.GetString(nI) 
     Else 
      lblProductID2.Text = String.Empty 
     End If 

     ' etc 

    End Select 
Next 

ナンバー2は、おそらく若干良いです:

+0

はい私はそれも仕事をするべきだと思います。とても有難い :) – brainsfrying

関連する問題