[英]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. 我正在尝试将数据从多查询sql显示到我的aspx页面,但是却没有结果。
I have a masterpage where i want to display values from sql. 我有一个主页,我想在其中显示sql的值。
My masterpage (Site.Master): 我的母版页(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): 我在文件(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#. 通过使用以下代码,我可以使其在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>
Thanks to Chris and Jo Biesta below folows a working codebehind file. 多亏了下面的Chris和Jo Biesta,他才找到了一个可工作的代码隐藏文件。 Perfekt guys, Thanks!
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;
}
}
}
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. 除非我错过了什么(在手机上阅读代码有点棘手),否则似乎您的问题是没有任何东西在调用您的countmembers方法。
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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.