执行SQL查询后将参数传递到URL

时间:2012-04-16 16:34:09

标签: c# asp.net sql wml

我最近问过如何写一个查询,谢天谢地你们回答了我(谢谢)

My Last Question

我在WML网站上工作,所以我需要传递查询中的值 我找到了一种方法(在下面的代码中显示),但它没有用。

    <%   
//this Query was provided earlier in the previous question.

        string queryString = "select st.firstname + ' ' + st.lastname,se.year, c.coursename,c.NumberOfCredits,ri.mark  from Students st inner join RegisteredIn ri on ri.StudentId=st.id inner join Semester se on se.id=ri.SemesterId inner join Courses c on c.id=se.id ";

我找到但未奏效的方式

         using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
         {

            System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(queryString, connection);

            command.Parameters.AddWithValue("@StudentId",StudentId);

                connection.Open();
                System.Data.SqlClient.SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                {
                    reader.Read();
                    string _firstname = reader[0].ToString();
                    string _lastname = reader[1].ToString();
                    string _coursename = reader[2].ToString();
                    string _credits = reader[3].ToString();
                    string _mark = reader[4].ToString();

                    string url = string.Format("~/StudentInfo.aspx?StudentId={0}&firstname={1}&lastname={2}&coursename={3}&credits={4}&mark={5}", StudentId, _firstname, _lastname, _coursename, _credits, _mark);
                    Response.Redirect(url);

    %>

回复参数的页面将类似于

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="StudentInfo.aspx.cs" Inherits="StudentInfo" %>

<wml>
    <card>



        <p><% Response.Write(Request.Params["StudentId"]);%></p>
        <p><b>firstname:</b> <% Response.Write(Request.Params["firstname"]);%></p>
        <p><b>lastname:</b> <% Response.Write(Request.Params["lastname"]);%></p>
        <p><b>coursename:</b> <% Response.Write(Request.Params["coursename"]);%></p>
       <p><b>credits:</b> <% Response.Write(Request.Params["credits"]);%></p>
        <p><b>Mark:</b> <% Response.Write(Request.Params["mark"]);%></p>

    </card>
</wml>

结果将像

一样
First Semester  2010
Student : Arin Rizk

Course Name     No. of Credit      Mark
    AAA                3            65
    BBB                3            23
    CCC                3            65
    DDD                3            58
    EEE                3            70

Your GPA for this semster is 3.12

我的问题是:   - 如何从查询中提取值并进入URL?   - 我将如何在WML或ASP中显示多个值? (因为结果将是多行和多个值)

提前谢谢

1 个答案:

答案 0 :(得分:1)

现在的代码只读取数据库的第一行。要读取所有行,必须在循环中调用Reader。Read(),例如:

while(reader.Read())
{
    string _firstname = reader[0].ToString();
    string _lastname = reader[1].ToString()
    ...
}

但我担心将所有这些信息作为URL中的参数传递真的不是一个好主意。你必须以某种方式加入所有行的结果,并在另一页上将它们分成单个值,这在我看来是多余的。此外,URL长度通常是有限的,因此如果您的查询返回的不仅仅是几行,它将无法工作。为什么要在URL中传输整个查询结果?更常见(并且更容易)在URL中传输学生的标识符(或任何你想要显示的内容),在第二页上再次从数据库中读取数据。

<强>更新 如果我理解正确,你的实际问题不是如何将查询字符串中的数据库查询结果传递给另一个页面,而是要在页面上显示查询结果。第一步是在第二页的表单上添加适当的控件(Label,DataGridView等)。然后,根据您使用的控件,您可以将控件绑定到数据源,或者在StudentInfo.aspx文件中的Page_Load等方法中手动控制数据。但由于这与你先问的完全不同,我建议你再提一个问题。此主题也多次在这里讨论过,所以你可以先看看these questions