简体   繁体   中英

Multiple values from sql query display on aspx page

I'm trying to display data from a multiquery sql to my aspx page but dont get things togheter.

I have a masterpage where i want to display values from sql.

My masterpage (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>

My code behind file (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;
                    }
                }
            }
        }
    }
}

Please help me to sort out the basic structur. I've tried many different methods but none that works and i really cant find a simple example when dealing with multiple values from a reader. I'm obviusly searching with wrong keywords.

I can get it to work in Classic ASP by using the following code but i really want to start to move to 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>

Thanks to Chris and Jo Biesta below folows a working codebehind file. Perfekt guys, Thanks!

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;
        }
    }
}

For others that might find this useful. If you return values are in text format use this instead:

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

Unless I've missed something (bit tricky to read the code on my phone) it looks as though your issue is that nothing is calling your countmembers method.

Try calling that method from page load method and see how you get on.

Also as Chris suggested, put a debug point in your code and step through it. Then you'll see where it isn't working.

Try the following code:

    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;
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM