GridView (gvPart)
에 SqlDataSource (sdsParts)
을 데이터 원본으로 사용하고 있습니다. gvPart
에는 AllowPaging="true"
속성이 있습니다. gvPart
을 통해 검색을 입력하고 실행하는 데 사용되는 TextBox (txtPartSearch)
및 Button
도 있습니다. 이를 위해, 나는 뒤에 코드에서 다음과 같은 한 :asp : SqlDataSource SelectCommand 속성이 페이징 할 때 지속되지 않습니다.
protected void partSearch(object sender, EventArgs e)
{
string query = txtPartSearch.Text;
string selectCmd = "SELECT ... WHERE partnum LIKE '" + query + "%' ... "; // I have cut out most of the statement for clarity
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}
이것의 목적은 사용자가 부품 번호를 입력하고 대신 전체 목록의 쿼리와 일치하는 gvPart
디스플레이 부분 만이 할 수 있도록하는 것입니다.
위의 방법을 사용한 후 gvPart
의 첫 번째 페이지가 예상 한 것과 같습니다. 그러나이 select 문으로 인해 gvPart
에 두 페이지 이상이 표시되는 경우 바닥 글의 2 페이지를 클릭하면 두 번째 페이지가 표시되지만 데이터는 원래 데이터의 페이지 2 (즉, 이전에 가져온 데이터 검색은 기본값이 SelectCommand
인 sdsParts
입니다.
페이징이 SqlDataSource
을 "다시 설정"하고 sdsParts.SelectCommand = selectCmd
문과 관계없이 Default.aspx로 작성된 SelectCommand
을 사용합니다. 다른 페이지에서 클릭 한 후
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string selectCmd = "SELECT ... ";
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}
}
을하지만 : Page_Load
의 기본 하나를 추가 한 후
<asp:SqlDataSource ID="sdsParts" runat="server" ConnectionString="..." />
과 : sdsParts
는 다음과 같이 보이도록
나는 완전히 밖으로 SelectCommand
떠나 시도 gvPart
은 공백으로, 마치 SelectCommand=""
입니다.
이 sdsParts
인 이유는 무엇이며 어떻게 수정하고 피할 수 있습니까?
편집
나는 내 문제를 해결했다. 같은 문제로 여기 오는 사람들을 위해 여기를 클릭하여 해결 방법에 대한 설명과 제안을 받으십시오.
편집은 왜 뒤에 코드에서의 SqlDataSource의 SelectCommand에 변경되어 더 명확
나는이 점을 처음 접했고, 그런 공격을 피할 방법을 모른다. 하나를 예방하기 위해 어떤 단계를 밟아야합니까? – wlyles
문자열을 연결하지 마십시오 (특히 사용자의 데이터). 그러면 데이터베이스로 전달됩니다. –
SqlDataSource에 다음과 같은 SelectCommand가 있어야합니다. 'SELECT ... FROM Parts WHERE partnum LIKE @ partnum' 다음에 partnum이라는 SqlParameter (Probably ControlParameter)를 만듭니다. –