0

私は映画レビューサイトをやっています。ShowMovie.aspx?Id = 6

.aspxページのURLからIDを取得できません

 <table border="1" cellpadding="1" cellspacing="1" style="width: 500px;">
                <tbody>
                    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <asp:Label ID="lblType" runat="server" Text='<%# Eval("Comment") %>'></asp:Label>
                                </td>
                            </tr>
                        </ItemTemplate>
                    </asp:Repeater>
                    <asp:SqlDataSource ID='SqlDataSource1' runat='server' ConnectionString='<%$ ConnectionStrings:con %>'
                        SelectCommand='SELECT [Comment] FROM [Comment] where [MovieId]=<%= Request.QueryString("Id") %>'>
                    </asp:SqlDataSource>
                </tbody>
            </table>

しかし、私は.aspx.csページでIDを取得できます

protected void Page_Load(object sender, EventArgs e)        {
        Id = Request.QueryString["Id"];
        String types = "";
        con = new Connect().Connection();
        cmd = new SqlCommand("Select * from Movie where Id=" + Id, con);
        dr = cmd.ExecuteReader();
        dr.Read();
        lblTitle.Text = dr["Title"].ToString();
        lblDescription.Text = dr["Description"].ToString();
        Picture.ImageUrl = dr["Picture"].ToString();
        dr.Close(); 

}

これはエラーです'<'の近くの構文が正しくありません。例外の詳細:System.Data.SqlClient.SqlException:「<」の近くの構文が正しくありません。

スタックトレース:[SqlException(0x80131904):'<'の近くの構文が正しくありません。]

4

1 に答える 1

1

SelectCommand は式をサポートしていません。とにかく、SQL インジェクションを避けるために、ID にパラメーターを使用する必要があります。良い解決策は、次のように SqlDataSource を定義することです。

  <asp:SqlDataSource ID='SqlDataSource1' runat='server' 
ConnectionString='<%$ ConnectionStrings:con %>' 
SelectCommand='SELECT [Comment] FROM [Comment] where [MovieId]=@Id'>
     <SelectParameters>
        <asp:Parameter Name="Id" Type="Int32" DefaultValue="0" />
      </SelectParameters>
</asp:SqlDataSource>

そして、ページの読み込みで:

SqlDataSource1.SelectParameters["Id"].DefaultValue = Request.QueryString["Id"]
于 2012-12-08T15:49:59.813 に答える