2013-01-04 2 views
1

질문이 있습니다. 스택 및 기타 사이트에서이 질문을 연구했지만 그 답을 찾지 못했습니다. 기존 열 이름에 문자열을 첨부하는 삽입 명령을 갖고 싶습니다. 다른 달에 대해 여러 번 동일한 열을 가진 테이블이 있습니다. 열의 예 : 이름 1은 1 월이고 이름 2은 2 월이됩니다. 주소 1은 1 월이고 주소 2은 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을 처음 접하는 어구에 대해 사과합니다. 심지어 무엇을 검색해야할지 정말로 확신하지 못하는 이유는 무엇입니까? 미리 감사드립니다.

+1

코드가 작동하지 않습니까? – DWright

+1

또한 테이블 디자인을 개선하여 자신이 훨씬 편하게 만들 수 있다고 생각합니다. 나는. 다른 열 이름을 사용하는 대신 테이블을 [월], [이름], [주소]로 설정하지 않으시겠습니까? 그런 다음 행당 여러 개의 이름/주소 열을 가질 필요가 없습니다. – DWright

+0

나는 그것이 작동 할 것이라고 생각하지 않는다. 나는 12 개월간의 데이터를 유지해야하고 데이터는 다른 문제가있는 다른 달의 문제가있는 달에서 달까지 다를 수있다. – squinny

답변

2

Dwright가 정확합니다. 변수를 사용자 정의 할 수 있으면 응용 프로그램이 SQL injection 공격에 취약 해지기 때문에 실제로이 작업을 수행하면 안됩니다. 데이터베이스 스키마를 재 설계하여 반복되는 열이 없도록하는 것이 훨씬 더 쉽고 간단합니다.

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

공지 사항 위의 문은 실제로이 같은 것으로 평가 것이라고 : 당신은 예를 들어, 변수 값 전후에 아포스트로피를 추가하고 있기 때문에

그러나 코드가 실패하는 이유는 가능성이 이유는 :

"[table].[name1]" 
:

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

는하지만, 당신이 정말로 원하는 것을, 아마입니다

그래서, 얻을, 당신은 같은 것을 할 필요가있을 것이다 : 내가 말했듯이

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

그러나,이 같은 동적 SQL을 구축하는 단지 나쁜 생각이 아니다, 그것은 또한 잘못 설계된 나타내는입니다 데이터베이스 스키마.

+0

SQL 인젝션에 대해 들었습니다. 변수가 드롭 다운 목록의 선택된 값을 기반으로 정의되는 경우 해당 변수에 영향을 받습니까? 그리고 변수에 대한 예제는 ty! – squinny

+0

아니요,이 경우 값을 편집 할 수없는 한 SQL 주입은 문제가되지 않습니다. 그러나 여전히보기 흉한 복잡하고 표준화 된 스키마가 아닙니다.그러나, 내가 본 가장 최악은 아니에요 :) –

+0

나는 많은 사람들에게 아직 어떤 멍청한 놈 이건간에 DB 전문가가 아니라는 것에 동의 할 것입니다. 그러나 저는 이것이 나쁜 생각이라고 생각합니다. 원래이 사이트는이 용도로 설계되지 않았고 초기 디자인보다 훨씬 나중에 추가되었습니다. 불행히도 나는 이것에 종사하고있는 유일한 사람이 아니다. 그리고 나는 항상 사물에 관한 나의 생각에 동의하는 다른 사람들을 얻을 수 없다. 너희 둘 모두에게 고마워한다 !! 좋은 통찰력! – squinny

관련 문제