マルチクエリSQLからaspxページにデータを表示しようとしていますが、togheterを取得できません。sqlクエリの複数の値がaspxページに表示される
私はSQLの値を表示する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>
は私のコード(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>
クリスとジョー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;
}
}
}
これは他にも役立ちます。私は何か(少しトリッキー自分の携帯電話上のコードを読むこと)を見逃している場合を除き、あなたの問題は何もあなたのcountmembersメソッドを呼び出していないことであるかのように見える
reader.GetString(reader.GetOrdinal("AllRegMembers"));
を私は今、ブレークポイントを挿入しようとした別の方法で、ページの読み込みからメソッドを呼び出そうが、ハズレました。どのくらいのブレークポイントを定義するか(私は "ヒット時"のメッセージと "ヒットカウント"を使用しようとしましたが、それは必要ありません)。どのように私はそれを実行させるのですか?私はPage_loadに追加しようとしましたcountmembers()もaspxファイル内のcountmembers()を追加しようとしましたが、Nothing – Slint
@Slintは、Chrisのコードを試してみると、以下の答えを確認しています。 –
はい、Chrisの例が働いていました。 LabelCountMembers.TextにLabel.LabelCountMemebers.Textで私の最初の誤解を修正するためにのみ必要 おかげでみんな! – Slint