【问题标题】:Select SQL Server table data using ASP.NET使用 ASP.NET 选择 SQL Server 表数据
【发布时间】:2015-04-08 04:24:18
【问题描述】:

我想使用 ASP.NET 从 SQL Server 中选择/检索所有数据。

我试过这段代码...

SqlCommand cmdd = new SqlCommand("select * from comment where ID='" + st + "'", con);
SqlDataReader drr;

drr = cmdd.ExecuteReader();

while(drr.Read())
{
    user_name.Text = drr["Username"].ToString();
    date.Text = drr["Date_Created"].ToString();
    userrcomment.Text = drr["Comment"].ToString();
}

代码工作正常,但它只能从数据库中选择一条记录,但我想选择所有记录...

还有谁能告诉我,如何仅使用一个数据读取器来使用两个/多个查询....

任何帮助将不胜感激...

更新: 问题是当查询运行时,只会显示最后一条记录,但我希望所有记录都显示在提到的 id...

更新 2 这是我的页面代码,因为我是 asp.net 的新手,所以如何获取 span 或 p 标签中的用户名和其他数据...

<asp:Panel ID="Panel1" runat="server" Height="140px" Width="378px">
    <p>  
    <asp:Label ID="user_name" runat="server"></asp:Label> Commented on <asp:Label ID="date" runat="server"></asp:Label></p>
    <asp:Label ID="userrcomment" runat="server" Height="31px" Width="378px"></asp:Label>
</asp:Panel>

【问题讨论】:

  • 您传递的 id 可能仅在您的选择命令("select * from comment where ID='" + st + "'", con);中检索一条记录@
  • 只有最后的值才会显示在文本框中。
  • 删除你的 where 子句,你会得到一切
  • 我在同一个 ID 上有多个记录,所以逻辑上它会从数据库中选择 ID 为 8 的所有记录,但它只会选择一个...
  • 你调试了吗?因为只有最后一行的值会显示在文本框中。

标签: asp.net sql-server


【解决方案1】:

如果您只获得一条记录,那么有两种可能性。

  1. "select * from comment where ID='" + st + "'"在你的where条件中只满足一条记录。

  2. 如果你有很多记录,你在while循环中使用SqlDataReader,但你只能看到最后一条记录,因为它会在每个循环中覆盖最后一条记录。

       while(drr.Read())
          {
    
                user_name.Text = drr["Username"].ToString();
                date.Text = drr["Date_Created"].ToString();
                userrcomment.Text = drr["Comment"].ToString();
    
        }
    

    user_name.Text 将替换为最后一条记录。

【讨论】:

  • 还有第三种可能。 select * from comment where ID=@id 可以返回多条记录,只要 ID 不是表的主键。这是 Shoaib 在对该问题的评论中所说的。
  • 是的@mason,但我认为第一种可能性是相同的,如果列 ID 不是唯一的,它可能有唯一的记录。
【解决方案2】:

假设您的代码可以正常工作,并且您希望仅在三个文本框中查看所有数据,而不是更多的表格格式。

SqlCommand cmdd = new SqlCommand("select * from comment where ID='" + st + "'", con);
SqlDataReader drr;

drr = cmdd.ExecuteReader();
while(drr.Read())
{
    user_name.Text += drr["Username"].ToString();
    date.Text += drr["Date_Created"].ToString();
    userrcomment.Text += drr["Comment"].ToString();
}

注意,我没有覆盖文本框的值,而是将字符串附加到它,因为我使用了+=。您可能还想将, 连接到它。


虽然多条记录更有可能,但您希望将它们放在一个表中。最简单、最直接的方法是:

代码背后

var cmd = new SqlCommand("select * from comment where ID=@id");
cmd.Parameters.AddWithValue("id", st);
var dt = new DataTable();
using(var con = new SqlConnection(connectionString))
{
    con.Open();
    dt.Load(cmd.ExecuteReader());
}
GridView1.DataSource = dt;
GridView1.DataBind();

标记

<asp:GridView runat="server" id="GridView1" AutoGenerateColumns="true" />

【讨论】:

    【解决方案3】:

    您可以使用单个 DataReader 执行多个选择查询。 CodeProject中有一篇文章,《对SQL Server执行多条SQL语句》。请阅读它,您肯定会得到解决方案。

      using(SqlConnection conn=new SqlConnetion(ConnectionString))
      {
         using(SqlCommand cmdd = new SqlCommand("select * from comment where    ID='" + st + "'", con))
         {
            using(SqlDataAdapter adapter=new SqlDataAdapter(cmdd))
            {
               DataTable dt=new DataTable();
               adapter.Fill(dt);
    
               //Bind the datasource with a repeater control in which you can  place textbox control. It will repeat for every data rows.
    
    
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      您需要将记录放入数据集中,以获取您尝试检索的所有数据

      SqlCommand cmdd = new SqlCommand("select * from comment where ID='" + st + "'", con);
          SqlDataReader drr = new SqlDataReader(cmdd);
          DataSet ds = new DataSet();
          da.Fill(ds);
      
          foreach(DataRow dr in ds.Tables[0].Rows)
          {
                          user_name.Text = dr["Username"].ToString();
                          date.Text = dr["Date_Created"].ToString();
                          userrcomment.Text = dr["Comment"].ToString();
          }
      

      【讨论】:

      • 这仍将只显示最后一条记录,因为您正在覆盖每条记录的文本框的值。
      • @mason 实际上没有,尝试添加一个临时变量,以便您在 foreach 语句期间迭代的每一个数据上进行操作
      • 这不是我的问题。但是是的,它只会显示最后一条记录。这就是 ASP.NET 的工作原理。您更新一个控件的值,无论最后设置的值是什么,都会在响应中发送给客户端。
      【解决方案5】:

      使用 ASP.NET 从 SQL-Server 中选择/检索所有数据

      对所有记录使用此 SqlDataReader (sqldr) GetValue

          SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringsName"].ConnectionString);
          string sql = "select * from comment where ID='" + st + "'";
          con.Open();
          SqlCommand cmd = new SqlCommand(sql, con);
          SqlDataReader sqldr = cmd.ExecuteReader();
          if (sqldr.Read() == true)
          {
      
              user_name.Text = sqldr.GetValue(2).ToString();
              date.Text = sqldr.GetValue(3).ToString();
              userrcomment.Text = sqldr.GetValue(4).ToString();
      
          }
      
          sqldr.Close();
          con.Close();
      

      【讨论】:

      • 这将只显示最后一条记录,因为您正在覆盖每条记录的文本框的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多