1

質問があります。スタックや他のサイトでこの質問を調査しましたが、答えが見つかりませんでした。既存の列名に文字列を追加する挿入コマンドが必要です。月ごとに同じ列が複数回含まれるテーブルがあります。列の例: name1は 1 月、name2は 2 月です。address1は 1 月、address2は 2 月、というように続きます。私が遭遇した唯一の考えは、列のデータに変数を渡す方法です。既存の列名に変数を追加する必要があるため、複数の挿入コマンドはありません。これが私のコードです。

 If MonthDDL.SelectedValue <> "" Then
        Select Case MonthDDL.SelectedValue  
            Case Is = "January"
                Month = "0"
                monthVar = "January"
            Case Is = "February"
                Month = "1"
                monthVar = "February"
            Case Is = "March"
                Month = "2"
                monthVar = "March"
            Case Is = "April"
                Month = "3"
                monthVar = "April"
            Case Is = "May"
                Month = "4"
                monthVar = "May"
            Case Is = "June"
                Month = "5"
                monthVar = "June"
            Case Is = "July"
                Month = "6"
                monthVar = "July"
            Case Is = "August"
                Month = "7"
                monthVar = "August"
            Case Is = "September"
                Month = "8"
                monthVar = "September"
            Case Is = "October"
                Month = "9"
                monthVar = "October"
            Case Is = "November"
                Month = "10"
                monthVar = "November"
            Case Is = "December"
                Month = "11"
                monthVar = "December"
                'Case Else
        End Select
        selDate = MonthDDL.SelectedValue
    Else
        lblSelect.Visible = True
    End If

DBCONN.Open()
        Dim SqlUpdate = New SqlCommand("SELECT * FROM table WHERE variable = '" + Session("sessionvariable") + "'", DBCONN)

MonthDDL.SelectedValue = monthVar And dr.HasRows = True Then
                SqlUpdateCommd = New SqlCommand("UPDATE table SET [table].[name] '"+ Month +'" = '" & contact & "',[table].[address]'"+ Month +'" = '" + address + "' WHERE variable = '" & Session("sessionvariable") & "'", DBCONN)
        ElseIf MonthDDL.SelectedValue = monthVar And dr.HasRows = False Then
            SqlUpdateCommd = New SqlCommand("INSERT INTO table (name '"+ Month +'", address '"+ Month +'", variable) Values ('" + contact + "', '" + address + "', Session("sessionvariable") + "')", DBCONN)

これは可能ですか?私はこれについて正しい方法に近づいていますか?vb.net を初めて使用するため、言い回しをお詫びします。何を検索すればよいのかわからないのは、おそらく、答えに出くわしたことがないからです。前もって感謝します!

4

1 に答える 1

2

ドライトは正しいです。とりわけ、変数がユーザー定義可能である場合、アプリケーションが SQL インジェクション攻撃を受けやすくなるため、これを行うべきではありません。そのような列が繰り返されないように、データベーススキーマを再設計する方がはるかに優れて簡単です。

ただし、コードが失敗する理由として考えられるのは、変数値の前後にアポストロフィを追加しているためです。たとえば、次のようになります。

"[table].[name '" & variable & "']"

上記のステートメントは、実際には次のように評価されることに注意してください。

"[table].[name '1']"

しかし、あなたが本当に欲しいのは、おそらくこれです:

"[table].[name1]"

したがって、それを取得するには、次のようにする必要があります。

"[table].[name" & variable & "]"

ただし、前述したように、動的 SQL をこのように構築することは悪い考えであるだけでなく、データベース スキーマの設計が不十分であることを示しています。

于 2013-01-04T20:25:23.017 に答える