2011-09-19 27 views
1

私の予約フォームのテキストボックス値を使用して動的にクエリを生成しようとしていますが、ユーザーが入力した値のみを更新します。VB.NetでSQL Serverデータベースを動的に更新します。

私は次のコードを使用しています:

Dim str As String 

str = "UPDATE Bookings SET " 
Dim first As Integer = 1 
For Each x As Control In Me.Controls 
    If x.GetType Is GetType(TextBox) Then 
     If first = 1 Then 
      first = 2 
     Else 
      str &= "," 
     End If 
     If x.Tag = 1 Then 
      str = str & x.Name & " = @" & x.Name 
     End If 
    End If 
Next 

をしかし、それはこのようなクエリ生成している:私はちょうど1フィールドを更新したい場合は

Update Bookings SET ,,booking_date = @booking_date,,,,,cust_name = @cust_name where bookingID = @bookingID 

をそれとも、この生成:

Update Bookings SET ,,,,,,,cust_name = @cust_name where bookingID = @bookingID 
+1

これはあなたの質問に全く答えられないことは知っていますが、SQLCommandとSQLParametersを使用することを検討してください。このようなSQLの生成は大規模なセキュリティ上の欠陥です。 –

+0

私はsqlcommandとsqlパラメータを使用していますが、このコードは実行時に値を持つテキストボックスに対してクエリを生成するだけです –

答えて

1
Dim str As String 
str = "UPDATE Bookings SET " 
Dim comma As string = "" 
For Each x As Control In Me.Controls 
    If x.GetType Is GetType(TextBox) Then 
    If x.Tag = 1 Then 
     str &= comma & x.Name & " = @" & x.Name 
     comma = "," 
    End If 
    End If 
Next 

ここにe一行の答え。

Dim str = "UPDATE Bookings SET " & String.Join(",", (From _E In Controls.OfType(Of Control)() Where _E.GetType() Is GetType(TextBox) AndAlso _E.Tag = "1" Select _E.Name).ToList()) 
+0

2つのマスクされたテキストボックスがあります1はcust_idとそのマスクですcsc-の後ろに4つの整数値が必要であり、もう1つはマスクが「 - 」であるコンタクト、つまり ' - 'の前に4つの整数値が必要で、 ' - 'の後に7つの整数値が必要です。これらのテキストボックスは両方とも検証されておらず、検証済みのイベントで.tag = 1を入れていますが、textchangedイベントでも試してみましたが役に立たず、これらの2つのテキストボックスに値が入力されてもクエリは変更されません。 ..これについての是正措置を提案してください –

関連する問題