设置存储过程的参数

时间:2016-06-07 12:59:01

标签: c# asp.net sql-server

我已经设置了一个存储过程,它使用一个输入参数(@QuestionID)来检索单个记录(记录来自多个数据表的元素)。

创建了一个datareader并在我的网页上使用这些值填充值。

我不知道该怎么做是设置输入参数的值,而不是点击链接的人从列表中打开“详细信息”页面(在引用页面上)。

引用页面,其中有人点击了详细信息记录并设置了QuestionID

<asp:GridView ID="GridView1" runat="server" Caption="Submitted Questions" AllowSorting="True" 
     CaptionAlign="Left" EmptyDataText="You have not submitted any Questions." PageSize="5"
     AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="QuestionID" runat="server" Text='<%# Eval("QuestionID") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="KeyObjective" HeaderText="Key Objective" ItemStyle-Width="150" />
        <asp:BoundField DataField="SubmitDate" HeaderText="Submitted Date" ItemStyle-Width="50" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="Details" runat="server" Text="View Details" PostBackUrl='<%# "~/Submit/Submit_Detail.aspx?Id=" + Eval("QuestionID")  %>'></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="Clone" runat="server" Text="Create Clone" PostBackUrl='<%# "~/Submit/Submit_Clone.aspx?Id=" + Eval("QuestionID")  %>'></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

当前硬编码为@QuestionID值为1的DataReader控件,我需要让它接受从引用页面发送的查询字符串值:

string sConstr = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
SqlConnection Conn = new SqlConnection(sConstr);

using (Conn)
{
    SqlCommand command = new SqlCommand("QuestionDetail", Conn);
    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.Add(new SqlParameter("@QuestionID", SqlDbType.BigInt));
    command.Parameters["@QuestionID"].Value = 1;

    Conn.Open();
    SqlDataReader reader = command.ExecuteReader();

    while (reader.Read())
        txt_author.Text = reader["Author"].ToString();

    reader.Close();
}

1 个答案:

答案 0 :(得分:2)

您应该能够从Request对象中读取它,假设它与LinkBut​​tons中提供的URL匹配(即查询字符串参数为“Id”):

command.Parameters["@QuestionID"].Value = Convert.ToInt32(Request["Id"]);

如果你的参数不同,你只需要相应地调整它。