【问题标题】:pass parameters into a url after executing a SQL Query执行 SQL 查询后将参数传递到 url
【发布时间】:2012-04-16 16:34:09
【问题描述】:

我最近问了一个关于如何编写查询的问题,谢天谢地,你们回答了我(谢谢)

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 中显示多个值? (因为结果将是多行和值)

提前谢谢你

【问题讨论】:

  • 请告诉我为什么我得到 -2 ,我想修复它。
  • -1。 Arin,你能不能让你采样 7 行长?如果你想发布一些代码审查的东西,有一个专门的网站 - codereview.stackexchange.com。此外,如果您可以检查您的班次/大写锁定(它似乎在您的键盘上半随机地工作),它会使问题看起来更好。最后重新阅读您的问题,看看您的问题是否清楚(“没有工作”/“哪里有问题”通常是缺少问题的症状)。
  • 究竟是什么不起作用?现在重定向被注释掉了。它是否重定向但查询字符串为空白?
  • 另外,我没有看到@StudentId 参数在您的 SQL 中使用的位置,所以看起来它正在吸引所有学生。
  • @arin,您的示例仍然非常长,绝对不需要发布您的所有代码 - 使其尽可能小并且最好是可编译的,显示您的标题中反映的特定问题...您的last cmets 意味着第 29 行的某些问题与您的问题标题无关。

标签: c# asp.net sql wml


【解决方案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

【讨论】:

  • 好的,我明白了你的意思,但是我厌倦了将查询的结果直接显示在页面中(换句话说,将它们显示在与 WML 卡相同的页面中)但是它不工作,告诉我如果我想你说我想从数据库中读取数据如何将它存储在变量中以便我可以打印出来?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
相关资源
最近更新 更多