2015-01-02 3 views
1

내 응용 프로그램에서 검색 상자를 만들려고하므로 SqlDataSource.SelectCommand를 수정해야합니다. 나는 어떤 도움을 주셔서 감사합니다! 나는 다음과 같이했다 테스트를 위해매개 변수가있는 저장 프로 시저를 사용하여 SqlDataSource.SelectCommand 수정

, 그것은 작동하지만 이것은 내가 지금까지 시도 무엇 SQL 주입

SqlDataSource1.SelectCommand = "sp_offer_search '" + txtSearch.Text + "', " + Session["customerId"] + " , '" + "Pending"+ "'"; 
    GridView1.DataBind(); 

에 취약하지만 작동하지 않습니다 :

if (txtSearch.Text != "") 
     {     
     //open connection 
      oCn.Open(); 
      SqlCommand com = new SqlCommand(query, oCn); 
      com.CommandType = CommandType.StoredProcedure; 

      com.Parameters.AddWithValue("@Variable", txtSearch.Text); 
      com.Parameters.AddWithValue("@CustomerId",Session["customerId"]); 
      com.Parameters.AddWithValue("@Status", txtStatus.Text); 


      DataTable dt = new DataTable(); 
      dt.Load(com.ExecuteReader()); 

      SqlDataSource1.SelectCommand = dt.ToString(); 
      GridView1.DataBind(); 
     } 
+0

정확히 어떻게 작동합니까? 오류가 발생 했습니까? 아니면 잘못된 반품을했거나 아무것도 반환하지 않았습니까? 다른 것? –

+0

일치하는 항목을 찾지 못했지만 아무 것도 반환하지 않습니다. – Carlos

+1

[AddWithValue()를 이미 사용 중지 할 수 있습니까?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/)를 확인하십시오. 05/12/can-we-stop-using-addwithvalue-already /)를 사용하고'.AddWithValue()'사용을 중지하십시오 - 예상치 못한 놀라운 결과를 초래할 수 있습니다 ... –

답변

0

해결되었습니다! 여기 제가 시도한 것과 작동합니다. 나는 이것이 누군가에게 도움이되기를 바랍니다.

if (txtSearch.Text != "") 
     { 
      try 
      { 
       // open connection 
       oCn.Open(); 

       SqlDataAdapter da = new SqlDataAdapter("sp_offer_search", oCn); 

       da.SelectCommand.CommandType = CommandType.StoredProcedure; 
       da.SelectCommand.Parameters.Add("@Variable", SqlDbType.VarChar).Value = txtSearch.Text; 
       da.SelectCommand.Parameters.Add("@CustomerId", SqlDbType.Int).Value = Session["customerId"]; 
       da.SelectCommand.Parameters.Add("@Status", SqlDbType.VarChar).Value = "Pending"; 

       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       GridView1.DataSourceID = String.Empty; 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 

      } 
      catch(Exception ex) 
      { 
       Response.Write(ex.ToString()); 
      } 
      finally 
      { 
       oCn.Close(); 
      } 

     } 
     else 
     { 
      GridView1.DataSourceID = "SqlDataSource1"; 
      SqlDataSource1.SelectCommand = SqlDataSource1.SelectCommand; 
      GridView1.DataBind(); 
     } 
4

경우] GridView 데이터 소스가 SqlDataSource1로 설정된 경우 DataTable이 필요하지 않습니다. 그리고 DataTable.ToString()은 selectCommand가 아닙니다. 시도 :

if (txtSearch.Text != "") 
    {       
     SqlCommand com = new SqlCommand(query, oCn); 
     com.CommandType = CommandType.StoredProcedure; 

     com.Parameters.AddWithValue("@Variable", txtSearch.Text); 
     com.Parameters.AddWithValue("@CustomerId",Session["customerId"]); 
     com.Parameters.AddWithValue("@Status", txtStatus.Text); 

     SqlDataSource1.SelectCommand = com; 
     GridView1.DataBind(); 
    } 
+0

안녕하세요 Crowcoder, "com"System.Data.SqlClient.SqlCommand를 반환하고 오류가 발생하고 있습니다 : 'System.Data.SqlClient.SqlCommand'는이 버전의 SQL Server에서 어떤 아이디어도 지원되지 않습니다? – Carlos

+0

데이터베이스가 무엇입니까? – Crowcoder

+0

우리는 SQL Azure를 사용하고 있습니다. – Carlos