2016-08-24 12 views
0

私は次のクエリを使用して取得できるデータベースの監査テーブルの最新のレコードを表示するページを作成しています。この情報は私が行に読んで、私は、任意のページから呼び出すことができ、「統計」オブジェクトを取り込みますクラスを作成したかった私のアプリケーション全体で複数回使用されるように単純なSQLクエリからC#クラスを取り込みます

select top 1 StartDateTime, EndDateTime, Status 
from Audit 
order by StartDateTime desc 

私のクラスは現在

public class Stats 
{ 
    public DateTime startDate() { 

     string mySQL; 
     mySQL = "select top 1 StartDateTime from Audit order by StartDateTime desc"; 

     string myConnectionString; 
     myConnectionString = "databaseCS"; 

     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[myConnectionString].ConnectionString); 

     SqlCommand myCommand = new SqlCommand(mySQL, myConnection); 

     using (myConnection) 
     { 
      myConnection.Open(); 
      DateTime startDate = Convert.ToDateTime(myCommand.ExecuteScalar()); 
      return startDate; 
     } 

    } 
    public DateTime endDate() 
    { 
     string mySQL; 
     mySQL = "select top 1 EndDateTime from Audit order by StartDateTime desc"; 

     string myConnectionString; 
     myConnectionString = "databaseCS"; 

     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[myConnectionString].ConnectionString); 

     SqlCommand myCommand = new SqlCommand(mySQL, myConnection); 

     using (myConnection) 
     { 
      myConnection.Open(); 
      DateTime endDate = Convert.ToDateTime(myCommand.ExecuteScalar()); 
      return endDate; 
     } 
    } 

    public string status() { 

     string mySQL; 
     mySQL = "select top 1 EndDateTime from Audit order by StartDateTime desc"; 

     string myConnectionString; 
     myConnectionString = "databaseCS"; 

     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[myConnectionString].ConnectionString); 

     SqlCommand myCommand = new SqlCommand(mySQL, myConnection); 

     using (myConnection) 
     { 
      myConnection.Open(); 
      string status = Convert.ToString(myCommand.ExecuteScalar()); 
      return status; 
     } 


    } 

のように見えるデータを表示されるページには、少なからず私は避けたいので、これらの統計情報の少なくとも2つの、複数のデータベースクエリが表示されます。

コードを変更してデータベースに一度問い合わせる方法はありますか?クエリからのデータテーブルまたはデータセットのために電話をかけるのGlobal.asaxの

感謝

のApplication_Startで
+0

どのようにしてデータベースを照会していますか?あなたは何かを見せなければなりません、あるいは私たちは推測しています。 – DavidG

+0

お詫び申し上げます、ちょうど今編集中 –

+0

'"はデータベースに複数回質問する必要があります " - なぜですか?あなたは、あなたが望むデータを返す質問のデータベースクエリを持っていますか?そのクエリを一度実行すると、必要なデータが得られます。何が問題なのですか? C#でデータベースを使う方法を尋ねていますか? – David

答えて

-1

()は、そのページに

 protected void Application_Start() 
     { 
     string query = "your query"; 
     ///Typically you would have some sort of datalayer 
     SqlConnection sqlConn = new SqlConnection(conSTR); 
     sqlConn.Open(); 
     SqlCommand cmd = new SqlCommand(query, sqlConn); 

     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     sqlConn.Close(); 

     ///Create Stat object 
     Stats stat = new Stats(); 
     stat.startDate = dt.Columns["startDate"]; 
     //etc 
     Session["stats"] = stat; 
} 

その後のセッションに保存し

protected void Page_Load(object sender, EventArgs e) 
    { 
    Stats stat = Session["stats"] as Stats; 
     } 
-1

より堅牢な例

public class MvcApplication : System.Web.HttpApplication 
    { 
     //Internal reference to the cache wrapper object 
     private static ICacheService _internalCacheObject; 

     //Public mehtod used to inject a new caching service into the application. 
     // This method is required to ensure full testability. 
     public void RegisterCacheService(ICacheService cacheService) 
     { 
      _internalCacheObject = cacheService; 
     } 

     //Use this property to access the underlying cache object from within 
     // controller methods. Use this instead of native Cache object. 
     public static ICacheService CacheService 
     { 
      get { return _internalCacheObject; } 
     } 
     protected void Application_Start() 
     { 
      //Inject a global caching service 
      RegisterCacheService(new AspNetCacheService()); 
      //Store some sample app-wide data 
      CacheService["StartTime"] = DateTime.Now; 
      //Call the cache service 
      // var data = MyNameSpace.MvcApplication.CacheService[...]; 
     } 

    } 

インタフェース

public interface ICacheService 
    { 
     Object Get(String key); 
     void Set(String key, Object data); 
     Object this[String key] { get; set; } 
    } 

クラス

public class AspNetCacheService : ICacheService 
    { 
     private readonly Cache _aspnetCache; 
     public AspNetCacheService() 
     { 
      if (HttpContext.Current != null) 
      { 
       _aspnetCache = HttpContext.Current.Cache; 
      } 
     } 
     public Object Get(String key) 
     { 
      return _aspnetCache[key]; 
     } 
     public void Set(String key, Object data) 
     { 
      _aspnetCache[key] = data; 
     } 
     public object this[String name] 
     { 
      get { return _aspnetCache[name]; } 
      set { _aspnetCache[name] = value; } 
     } 

    } 
関連する問題