2016-04-13 8 views
1

マルチクエリ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")); 

答えて

1

次のコードを試してみてください。

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

:あなたが値を返す場合は、テキスト形式での使用に代わり、このされています。

ページロードメソッドからそのメソッドを呼び出して、どのように動くかを確認してください。

また、Chrisが示唆しているように、コードにデバッグポイントを置き、ステップ実行します。その後、それは動作していないが表示されます。

+0

を私は今、ブレークポイントを挿入しようとした別の方法で、ページの読み込みからメソッドを呼び出そうが、ハズレました。どのくらいのブレークポイントを定義するか(私は "ヒット時"のメッセージと "ヒットカウント"を使用しようとしましたが、それは必要ありません)。どのように私はそれを実行させるのですか?私はPage_loadに追加しようとしましたcountmembers()もaspxファイル内のcountmembers()を追加しようとしましたが、Nothing – Slint

+0

@Slintは、Chrisのコードを試してみると、以下の答えを確認しています。 –

+0

はい、Chrisの例が働いていました。 LabelCountMembers.TextにLabel.LabelCountMemebers.Textで私の最初の誤解を修正するためにのみ必要 おかげでみんな! – Slint

関連する問題