从sql查询的多个值显示在aspx页面

问题描述:

我试图从一个multiquery sql显示数据到我的aspx页面,但没有让事情变得容易。从sql查询的多个值显示在aspx页面

我有一个母版页,我想从sql显示值。

我的母版(的Site.Master):

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="MySite.SiteMaster" %> 
<!DOCTYPE html> 
<html lang="en"> 
    <head runat="server"></head> 
    <body> 
     <form runat="server"> 
      <div class="content"> 
       <div> 
        <font class="label label-primary"><%= DateTime.Now.ToShortDateString() %> 
        <asp:Label runat="server" ID="LabelCountMember"></asp:Label> 
        <asp:Label runat="server" ID="LabelCountLogins"></asp:Label> 
        <asp:Label runat="server" ID="LabelCountFailedLogins"></asp:Label> 
       </div> 
       <asp:ContentPlaceHolder ID="MainContent" runat="server"> 
       </asp:ContentPlaceHolder> 
       <hr /> 
       <footer> 
        <p>This is my footer!</p> 
       </footer> 
      </div> 
     </form> 
    </body> 
</html> 

我的隐藏文件的代码(Site.Master.cs):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Web.Configuration; 
using System.Data; 

namespace MySite 
{ 
    public partial class SiteMaster : MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     public void countmembers(object sender, EventArgs e) 
     { 
      string sql = @"SELECT (SELECT COUNT(MemberID) from MyTable where Mamber = 'Registered') AS AllRegMembers, 
             (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'ok') AS AllLogins, 
             (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'fail') AS AllFailLogins"; 

      string variable; 
      using (var connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString)) 
      using (var command = new SqlCommand(sql, connection)) 
      { 
       connection.Open(); 
       using (var reader = command.ExecuteReader()) 
       { 
        //Check the reader has data: 
        if (reader.Read()) 
        { 
         variable = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 

        } 
        // If you need to use all rows returned use a loop: 
        while (reader.Read()) 
        { 
         // Do something 
         string strAllRegMembers = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 
         string strAllLogins = reader.GetInt32(reader.GetOrdinal("AllLogins")).ToString(); 
         string strAllFailLogins = reader.GetInt32(reader.GetOrdinal("AllFailLogins")).ToString(); 

         Label.LabelCountMember.Text = strAllRegMembers; 
         Label.LabelCountLogins.Text = strAllLogins; 
         Label.LabelCountFailedLogins.Text = strAllFailLogins; 
        } 
       } 
      } 
     } 
    } 
} 

请帮我理清基本structur。我已经尝试了很多不同的方法,但没有一个能够正常工作,而且在处理来自阅读器的多个值时,我真的找不到一个简单的示例。我很不情愿地用错误的关键字搜索。

我可以通过使用下面的代码让它在Classic ASP中工作,但我真的想开始移动到C#。下面

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<!--#include file="dbcon.asp" --> 
<% 
sql = "SELECT (SELECT COUNT(MemberID) from MyTable where Mamber = 'Registered') AS AllRegMembers, " & _ 
       "SELECT COUNT(MemberID) from MyTable where LoginStatus = 'ok') AS AllLogins, " & _ 
       "(SELECT COUNT(MemberID) from MyTable where LoginStatus = 'fail') AS AllFailLogins";" 

call dbOpen(conn) 

Set rs = conn.Execute(sql) 
strAllRegMembers = rs("AllRegMembers") 
strAllLogins = rs("AllLogins") 
strAllFailLogins = rs("AllFailLogins") 
rs.Close : Set rs = Nothing 

Call dbClose(conn) 
%> 
<!DOCTYPE HTML> 
<html> 
<head></head> 
<body> 
<span>Registered members: <%= strAllRegMembers %></span> 
<span>Number of OK logins: <%= strAllLogins %></span> 
<span>Number of failed logins: <%= strAllFailLogins %></span> 
</body> 
</html> 

感谢Chris和Jo Biesta folows工作代码隐藏文件。 Perfekt家伙,谢谢!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Web.Configuration; 
using System.Data; 

namespace MySite 
{ 
    public partial class SiteMaster : MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      countmembers(); 
     } 

     public void countmembers() 
     { 

      string strAllRegMembers = String.Empty; 
      string strAllLogins = String.Empty; 
      string strAllFailLogins = String.Empty;     
      string sql = @"SELECT (SELECT COUNT(MemberID) from MyTable where Mamber = 'Registered') AS AllRegMembers, 
             (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'ok') AS AllLogins, 
             (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'fail') AS AllFailLogins"; 

      string variable; 
      using (var connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString)) 
      using (var command = new SqlCommand(sql, connection)) 
      { 
       connection.Open(); 
       using (var reader = command.ExecuteReader()) 
       { 
        //Check the reader has data: 
        if (reader.Read()) 
        { 
         variable = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 

        } 
        // If you need to use all rows returned use a loop: 
        while (reader.Read()) 
        { 
         // Do something 
         strAllRegMembers = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 
         strAllLogins = reader.GetInt32(reader.GetOrdinal("AllLogins")).ToString(); 
         strAllFailLogins = reader.GetInt32(reader.GetOrdinal("AllFailLogins")).ToString(); 


        } 
       } 
      } 

       LabelCountMember.Text = strAllRegMembers; 
       LabelCountLogins.Text = strAllLogins; 
       LabelCountFailedLogins.Text = strAllFailLogins; 
     } 
    } 
} 

对于其他人可能会觉得这有用。如果返回值是文本格式,用这个代替:

reader.GetString(reader.GetOrdinal("AllRegMembers")); 

试试下面的代码:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data.SqlClient; 
    using System.Web.Configuration; 
    using System.Data; 

    namespace MySite 
    { 
     public partial class SiteMaster : MasterPage 
     { 
      protected void Page_Load(object sender, EventArgs e) 
      { 
       countmembers(); 
      } 

      public void countmembers() 
      { 

       string strAllRegMembers = String.Empty; 
       string strAllLogins = String.Empty; 
       string strAllFailLogins = String.Empty;     
       string sql = @"SELECT (SELECT COUNT(MemberID) from MyTable where Mamber = 'Registered') AS AllRegMembers, 
              (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'ok') AS AllLogins, 
              (SELECT COUNT(MemberID) from MyTable where LoginStatus = 'fail') AS AllFailLogins"; 

       string variable; 
       using (var connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnString"].ConnectionString)) 
       using (var command = new SqlCommand(sql, connection)) 
       { 
        connection.Open(); 
        using (var reader = command.ExecuteReader()) 
        { 
         //Check the reader has data: 
         if (reader.Read()) 
         { 
          variable = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 

         } 
         // If you need to use all rows returned use a loop: 
         while (reader.Read()) 
         { 
          // Do something 
          strAllRegMembers = reader.GetInt32(reader.GetOrdinal("AllRegMembers")).ToString(); 
          strAllLogins = reader.GetInt32(reader.GetOrdinal("AllLogins")).ToString(); 
          strAllFailLogins = reader.GetInt32(reader.GetOrdinal("AllFailLogins")).ToString(); 


         } 
        } 
       } 

        Label.LabelCountMember.Text = strAllRegMembers; 
          Label.LabelCountLogins.Text = strAllLogins; 
          Label.LabelCountFailedLogins.Text = strAllFailLogins; 
      } 
     } 
    } 

除非我已经错过了一些东西(有点棘手看我手机上的代码),它看起来好像你的问题是,没有什么是呼唤你的countmembers方法。

尝试从页面加载方法调用该方法,看看你如何继续。

同样如Chris所示,在您的代码中添加一个调试点并逐步完成。然后你会看到它不工作的地方。

+0

现在我试着插入断点,在不同的方式尝试调用从页面加载的方法,但没了。关注我定义了多少个断点(我曾尝试使用“何时点击”显示消息和“点击数”,但是没有)。我如何让它运行?我尝试在Page_load中添加countmembers()也尝试在我的aspx文件中添加countmembers(),但是没有。 – Slint

+0

@Slint检查Chris在代码上左侧的答案以尝试,我会建议他发送相同的代码。 –

+0

是的,Chris的例子工作。只需要解决我的Label.LabelCountMemebers.Text到LabelCountMembers.Text我的第一次misstakes 谢谢你们! – Slint