2016-04-13 83 views
1

我試圖從一個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")); 

回答

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

除非我已經錯過了一些東西(有點棘手看我手機上的代碼),它看起來好像你的問題是,沒有什麼是呼喚你的countmembers方法。

嘗試從頁面加載方法調用該方法,看看你如何繼續。

同樣如Chris所示,在您的代碼中添加一個調試點並逐步完成。然後你會看到它不工作的地方。

+0

現在我試着插入斷點,在不同的方式嘗試調用從頁面加載的方法,但沒了。關注我定義了多少個斷點(我曾嘗試使用「何時點擊」顯示消息和「點擊數」,但是沒有)。我如何讓它運行?我嘗試在Page_load中添加countmembers()也嘗試在我的aspx文件中添加countmembers(),但是沒有。 – Slint

+0

@Slint檢查Chris在代碼上左側的答案以嘗試,我會建議他發送相同的代碼。 –

+0

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