2011-09-26 4 views
0

C# 양식을 사용하고 "varchar (100)"텍스트 상자에 열 이름을 입력하고 양식을 제출하여 "Products3 "SQL Server의 테이블. 이 오류가 나타납니다. "열 만들기 오류. 'System.Web.UI.WebControls.TextBox'근처의 구문이 잘못되었습니다." 제출 버튼을 클릭하면 SQL 문에 텍스트 상자가 표시되지 않는 이유가 확실하지 않습니다. 도와주세요.asp.net 양식을 사용하여 SQL 서버 테이블에 열 추가

========================== FrontPage에서의 ===

<form id="form1" runat="server"> 
<div> 
<br /><br /> 
    <asp:button id="IP_TextBtn" onclick="btnAddColumn_Click" runat="server" text="Submit" /> 
    <br /> 
    <br /> 
    <asp:textbox id="txtIP_TextField" runat="server"></asp:textbox> 
    <br /> 
    <br /> 
    <asp:Label id="lblResults" runat="server" Width="575px" Height="121px" Font-Bold="True"></asp:Label> 
    <br /> 
    <br /> 
</div> 
</form> 

========= ================ 당신의 텍스트 상자의 값 그게 BackPage의 ===

// Creating the Method for adding a new column to the database 
public virtual void btnAddColumn_Click(object sender, EventArgs args) 
    { 
     { 
      string alterSQL; 
      alterSQL = "ALTER TABLE Products3 "; 
      alterSQL += "ADD '" + txtIP_TextField + "' bool()"; 

      SqlConnection con = new SqlConnection(GetConnectionString()); 
      SqlCommand cmd = new SqlCommand(alterSQL, con); 
      cmd.Parameters.AddWithValue("@txtIP_TextField ", txtIP_TextField.Text); 

      int SQLdone = 0; 
      try 
      { 
       con.Open(); 
       SQLdone = cmd.ExecuteNonQuery(); 
       lblResults.Text = "Column created."; 
      } 
      catch (Exception err) 
      { 
       lblResults.Text = "Error Creating column. "; 
       lblResults.Text += err.Message; 
      } 
      finally 
      { 
       con.Close(); 
      } 
     } 
    } 

답변

1

매개 변수화 된 쿼리에 대해 혼란스러워합니다. txtIP_TextField은 쿼리의 매개 변수가 아니므로 Parameters 컬렉션에 추가하면 도움이되지 않습니다. 귀하의 질문은 다음과 같아야합니다

string alterSQL = "ALTER TABLE Products3 ADD @txtIP_TextField BIT"; 

편집 :이 문을 매개 변수화 할 수없는 경우가 있습니다처럼 것 같습니다.

string alterSQL = String.Format("ALTER TABLE Products3 ADD {0} BIT", 
           txtIP_TextField.Text); 

그러나,이 여전히 SQL 인젝션 공격에 대상 , 당신은 그것을 사용하기 전에을 "청소"를 txtIP_TextField.Text이 필요합니다 :이 경우, 당신은 사용해야합니다.

+0

제안 사항과 함께이 오류가 발생했습니다. 열 만들기 오류. 'COLUMN'키워드 근처의 구문이 잘못되었습니다. –

+0

고맙지 만 여전히 오류가 발생합니다 : 열 만들기 오류. 'COLUMN'키워드 근처의 구문이 잘못되었습니다. –

+0

네 말이 맞아. 구문을 잘못 읽었습니다. "열"이라는 단어는 사용되지 않습니다. 내 업데이트 답변을 참조하십시오. –

0

사용 txtIP_TextField.Text

alterSQL += "ADD '" + txtIP_TextField.Text + "' bool()"; 

+0

-1 : 오류 만들기 열 : SQL 주입 –

+0

에 활짝 열려 나는이 모든 codebehinde 나는 당신의 제안에이 오류가 발생 SQL 주입 – Artem

+0

에 활짝 열려라고 생각합니다. 'TEST'근처의 구문이 잘못되었습니다. 이것은 공용 도구가 아니기 때문에 SQL 인젝션에 대해 너무 걱정하지 않기 위해 사용할 내부 도구입니다. 텍스트 상자에 "TEST"를 입력했습니다. –

0

사용이 :

string alterSQL; 
alterSQL = "ALTER TABLE Products3 "; 
alterSQL += "ADD @txtIP_TextField bool()"; 

SqlConnection con = new SqlConnection(GetConnectionString()); 
SqlCommand cmd = new SqlCommand(alterSQL, con); 
cmd.Parameters.AddWithValue("@txtIP_TextField ", txtIP_TextField.Text); 
+0

귀하의 제안과 함께이 오류가 발생했습니다 : Error creating column. '@txtIP_TextField'근처의 구문이 잘못되었습니다. –

관련 문제