درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من

    تا 75 درصد تخفیف ویژه شب یلدا بر روی کلیه محصولات وب سایت توسینسو فقط تا 30 آذر

    مانده تا پایان تخفیف ها

    تخفیف های وب سایت
    همه تخفیف ها

    عضویت در

    کانال تلگرام

    توسینسو

    اطلاعات مطلب
      مدرس/نویسنده
      دوره های مرتبط
      دوره های توسینسو دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 11 قسط خریداری کنید
      دوره آموزشی Exploit نویسی به زبان Perl
      دوره آموزشی Exploit نویسی به زبان Perl
      مدرس: ایمان جوادی
      این دوره را در 7 قسط خریداری کنید
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      مدرس: کاظم تقندیکی
      این دوره را در 11 قسط خریداری کنید
      دوره آموزشی طراحی رابط کاربری با JavaFX
      دوره آموزشی طراحی رابط کاربری با JavaFX
      مدرس: حسام رسولیان
      این دوره را در 13 قسط خریداری کنید
      دوره آموزشی برنامه نویسی مقدماتی پایتون به زبان ساده
      دوره آموزشی برنامه نویسی مقدماتی پایتون به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 23 قسط خریداری کنید
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 78 قسط خریداری کنید
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      مدرس: مهدی عادلی فر
      این دوره را در 2 قسط خریداری کنید
      دوره متوسطه برنامه نویسی به زبان جاوا به زبان ساده
      دوره متوسطه برنامه نویسی به زبان جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 18 قسط خریداری کنید
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      مدرس: ایمان جوادی
      این دوره را در 13 قسط خریداری کنید
      دوره آموزشی ساخت ربات تلگرام
      دوره آموزشی ساخت ربات تلگرام
      مدرس: کاظم تقندیکی
      این دوره را در 8 قسط خریداری کنید
      دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 17 قسط خریداری کنید
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 27 قسط خریداری کنید
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      مدرس: امیر حسین فضلیخانی
      این دوره را در 12 قسط خریداری کنید
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 17 قسط خریداری کنید
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      مدرس: کاظم تقندیکی
      این دوره را در 20 قسط خریداری کنید

      مشاهده تعداد بازدیدکنندگان با پروسیجر با معماری سه لایه

      تاریخ 21 ماه قبل
      نظرات 1
      بازدیدها 158
      مشاهده تعداد بازدیدکنندگان با پروسیجر با معماری سه لایه
      در این آموزش می خوایم با هم نمایش تعداد افراد بازدیدکندده رو در Asp.net با معماری سه لایه پیاده سازی کنیم.
      ابتدا کد های sql رو با هم مرور می کنیم.


      
      
      جدول تاریخ  و تعداد بازدیدکنندگان
      
      CREATE TABLE [dbo].[DateOnlineUser](
      	[IdDateOnlinUser] [int] IDENTITY(1,1) NOT NULL,
      	[date] [date] NOT NULL,
      	[count] [int] NOT NULL,
       CONSTRAINT [PK_DateOnlineUser] PRIMARY KEY CLUSTERED 
      (
      	[IdDateOnlinUser] ASC
      )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
      ) ON [PRIMARY]
      
      
      جدول ip 
      
      CREATE TABLE [dbo].[IpDateOnlinUser](
      	[Id] [int] IDENTITY(1,1) NOT NULL,
      	[IdDateOnlinUser] [int] NOT NULL,
      	[IP] [nvarchar](50) NULL,
       CONSTRAINT [PK_IpDateOnlinUser] PRIMARY KEY CLUSTERED 
      (
      	[Id] ASC
      )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
      ) ON [PRIMARY]
      
      
      چروسیجر محاسبه افراد بازد کننده 
      create PROCEDURE [dbo].[onlineuser]
      @ip nvarchar(12)
      AS
      declare @datenow date---- تاریخ امروز 
      declare @idDate int -----کد تاریخ امروز 
      declare @t int 
      set @datenow =  CONVERT (date, SYSDATETIME()) ---گرفتن تاریخ امروز از sql 
      
      
      
      if  EXISTS  
      (select DateOnlineUser.[date]  
       from DateOnlineUser 
       where DateOnlineUser.[date] = @datenow  
       
       ) ---  چک   تاریخ   در صورت وجود  داشتن 
      ---- 
      begin
              set @idDate=(select IdDateOnlinUser from DateOnlineUser where DateOnlineUser.[date] =@datenow);
      		 SELECT @idDate;
               if (select COUNT(*)    
               from IpDateOnlinUser  , DateOnlineUser
               where IpDateOnlinUser.IP = @ip and  DateOnlineUser.IdDateOnlinUser =@idDate ) <1 
      
      
      BEGIN
      
      
      update  DateOnlineUser 
                set  [count]= [count]+1
                where DateOnlineUser.[date] = @datenow;
                set @idDate = ( select DateOnlineUser.IdDateOnlinUser from DateOnlineUser  where DateOnlineUser.[date] = @datenow);
       
                insert into  IpDateOnlinUser([IdDateOnlinUser] ,[IP]  )
                values (  @idDate , @ip  ) 
             select 1;
      
      END 
      end
      -------------------------------------------------------------------------------
      
      ELSE
       BEGIN 
      
        insert into 
           DateOnlineUser ([date]  , [count] )
           values ( @datenow , 1   );
           set @idDate=@@IDENTITY;
      
             insert into  IpDateOnlinUser([IdDateOnlinUser] ,[IP]  )
             values (  @idDate , @ip ) 
             select 2;
       END
      
      
      
      GO
      
      تعداد افراد 
      
      
      
      CREATE PROCEDURE [dbo].[selectomnlineuseer]
      
      AS
      BEGIN
      	-- SET NOCOUNT ON added to prevent extra result sets from
      	-- interfering with SELECT statements.
      	SET NOCOUNT ON;
      
      select ( [count] ) from DateOnlineUser where [date] =  CONVERT (date, SYSDATETIME())   
      
      
      END
      
      
      GO
      
      
      پروسیجر مشاهده همه بازیدکنندگان
      
      
      CREATE PROCEDURE [dbo].[viweall]
      
      AS
      BEGIN
      	-- SET NOCOUNT ON added to prevent extra result sets from
      	-- interfering with SELECT statements.
      	SET NOCOUNT ON;
      
      select sum( [count]) from DateOnlineUser 
      
      
      END
      
      
      GO
      
      پروسیجر بازدیدکننگان دیروز 
      
      
      CREATE PROCEDURE  [dbo].[yesterdayonline]
      	-- Add the parameters for the stored procedure here
      
      AS
      BEGIN
      	declare @y date 
      	set @y = DATEADD(DAY ,-1 ,SYSDATETIME() )
      select ([count]) from DateOnlineUser
      where [date] =  @y
      
      	-- SET NOCOUNT ON added to prevent extra result sets from
      	-- interfering with SELECT statements.
      	
         
      END
      GO
      
      
      دادهای آماده
      
      
      INSERT [dbo].[DateOnlineUser] ([IdDateOnlinUser], [date], [count]) VALUES (4, CAST(N'2016-08-15' AS Date), 2)
      INSERT [dbo].[DateOnlineUser] ([IdDateOnlinUser], [date], [count]) VALUES (5, CAST(N'2016-08-16' AS Date), 1)
      SET IDENTITY_INSERT [dbo].[DateOnlineUser] OFF
      SET IDENTITY_INSERT [dbo].[IpDateOnlinUser] ON 
      
      INSERT [dbo].[IpDateOnlinUser] ([Id], [IdDateOnlinUser], [IP]) VALUES (3, 4, N'192.168.1.2')
      INSERT [dbo].[IpDateOnlinUser] ([Id], [IdDateOnlinUser], [IP]) VALUES (4, 4, N'192.168.1.1')
      INSERT [dbo].[IpDateOnlinUser] ([Id], [IdDateOnlinUser], [IP]) VALUES (5, 5, N'192.168.1.1')
      




      ابتدا به پروژه یک فایل Global.asax اضافه میکنیم و کدهای زیر را به آن اضافه میکنیم .

      protected void Application_Start(object sender, EventArgs e)
            {
                Application["OnlineUsers"] =1; 
            }
       
            protected void Session_Start(object sender, EventArgs e)
            {
                Application.Lock();
                Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
                Application.UnLock();  
            }
       
            protected void Application_BeginRequest(object sender, EventArgs e)
            {
                Application.Lock();
                Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
                Application.UnLock();  
            }
      

      بعد از این مرحله میریم سراغ نوشتن کلاسهای برنامه



      یک پوشه به نام bal میسازیم . در این پوشه قرار است کلاسهای connection و کلاس اجرای پراسیجرها در سی شارپ نوشته شوند .

      یک کلاس به نام SqlCon.cs می سازیم و کدهای زیر را درون آن قرار میدهیم . این کلاس جهت اتصال پروژه به sql می باشد.


      public class SqlCon
          {
              public SqlConnection con = null;
              public SqlConnection opencon()
              {
       
                  con = new SqlConnection("Data Source=.;Initial Catalog=OnlineUser;Integrated Security=True");
                  con.Open();
                  return con;
       
              }
              public void closecon()
              {
                  if (con != null)
                  {
       
                      if (con.State == ConnectionState.Open)
                          con.Close();
                  }
       
              }
           
      }
      


      کلاس دوم را با نام BalExe.cs میسازیم و کدهای زیر را درون آن قرار می دهیم . این کلاس جهت اجرای کدها می باشد.


      public class BalExe
      {
           SqlCon con = new SqlCon();
          DataTable dt;
          DataSet ds;
          SqlDataAdapter da;
       
          SqlCommand com;
         public BalExe()
          {
       
          }
       
         public int execute(string procname)
         {
             int chek = -1;
             da = new SqlDataAdapter();
             da.SelectCommand = new SqlCommand();
             da.SelectCommand.CommandText = procname;
             da.SelectCommand.CommandType = CommandType.StoredProcedure;
       
             da.SelectCommand.Connection = con.opencon();
             chek = Convert.ToInt32(da.SelectCommand.ExecuteScalar());
             con.closecon();
             return chek;
       
       
         }
       
         public int insert_update(string procname, SqlParameter[] pa)
         {
             da = new SqlDataAdapter();
             da.SelectCommand = new SqlCommand();
             da.SelectCommand.CommandText = procname;
             da.SelectCommand.CommandType = CommandType.StoredProcedure;
             da.SelectCommand.Parameters.AddRange(pa);
             da.SelectCommand.Connection = con.opencon();
             int chek = Convert.ToInt32(da.SelectCommand.ExecuteScalar());
             con.closecon();
             return chek;
       
       
         }
       
      }
      
       
      


      کار با کلاسها تمام شد.





      پوشه ای دیگری به نام dal میسازیم

      یک کلاس به نام OnlineUserClass.cs میسازیم و کدهای زیر را درون ان قرار میدهیم این کلاس مقدار ip را از برنامه میگیرد و با توجه به وضعیت عمل درج و یا به روز رسانی تعداد کاربران را انجام میدهد.




      public class OnlineUserClass
      {
          BalExe bal = new BalExe();
       
          public string ip { get; set; }
       
          public int Insert()
          {
              SqlParameter[] pa = new SqlParameter[]
              {     new  SqlParameter ("@ip" , this.ip) ,
                  
               };
              return bal.insert_update("onlineuser", pa);//==> onlineuser  is a PROCEDURE
          }
       
          public int selectomnlineuseer()
          {
              return bal.execute("selectomnlineuseer");//==> selectomnlineuseer  is a PROCEDURE
          }
          public int yesterdayonline()
          {
              return bal.execute("yesterdayonline");//==> yesterdayonline  is a PROCEDURE
          }
       
          public int viweall()
          {
              return bal.execute("viweall");//==> yesterdayonline  is a PROCEDURE
          }
      }
      


      کلاس دیگری به نام datefarsi میسازیم. این کلاس از نوع static میباشدو برای تبدیل تاریخ میلادی به شمسی از آن استفاده میشود .

      بر روی نام پروژه کلیک راست میکنیم و یک صفحه جدید به پروژه اضافه میکنیم و کدهای زیر را در بخش Source آن قرار میدهیم .


      
      
      <!DOCTYPE html>
      
      <html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" lang="fa-ir">
      <head runat="server">
          <title>مشاهده افراد آنلاین</title>
           <meta charset="utf-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1" />
         
          <link href="packages/bootstrap.3.3.6/content/Content/bootstrap-theme.css" rel="stylesheet" />
          <link href="packages/bootstrap.3.3.6/content/Content/bootstrap.min.css" rel="stylesheet" />
              <link href="packages/bootstrap.3.3.6/content/Content/bootstrap-theme.min.css" rel="stylesheet" />
              <script src="packages/jQuery.1.9.1/Content/Scripts/jquery-1.9.1-vsdoc.js"></script>
              <script src="packages/jQuery.1.9.1/Content/Scripts/jquery-1.9.1.min.js"></script>
              <script src="packages/jQuery.1.9.1/Tools/jquery-1.9.1.intellisense.js"></script>
              <script src="packages/bootstrap.3.3.6/content/Scripts/bootstrap.min.js"></script>
          <link href="packages/bootstrap.3.3.6/content/Content/w3.css" rel="stylesheet" />
      </head>
      <body>
          <form id="form1" runat="server">
          <div>
              <div class="contaner">
                  <div class="row w3-white">
                      <div class="col-lg-4">
                      </div>
                      <div class="col-lg-4">
                  <%--      www.ctaap.ir--%>
                          <h3>مشاهده تعداد بازدید کنندگان</h3>
      
                          <div class="well">
                                 <p>
                                  <span> افراد آنلاین :  </span><span class="glyphicon glyphicon-ok"></span><span id="onlineuser" runat="server"></span>
      
                              </p>
                              <p>
                                  <span>تاریخ امروز :  </span><span class="glyphicon glyphicon-calendar "></span><span id="datef" runat="server"></span>
      
                              </p>
                              <hr />
                              <p>
                                  <span>آی پی شما :  </span><span id="yourip" runat="server"></span>
                              </p>
                              <p>
                                  <span>بازدید امروز:  </span><span id="todayonline" runat="server"></span>
                              </p>
                              <p>
                                  <span>بازدید دیروز  :  </span><span id="yesterdayonline" runat="server"></span>
                              </p>
                              <p>
                                  <span>بازدید کل  :  </span><span id="viweall" runat="server"></span>
                              </p>
                          </div>
      
                      </div>
                      <div class="col-lg-4">
                      </div>
                  </div>
              </div>
              
          </div>
          </form>
      </body>
      </html>
      



      و در قمست کد نویسی کدهای زیر را وارد میکنیم :


      using DAL.DALCLASS;
      using OnlineUser.dal;
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;
       
      namespace OnlineUser
      {
          public partial class home : System.Web.UI.Page
          {
              protected void Page_Load(object sender, EventArgs e)
              {
                  OnlineUserClass online = new OnlineUserClass();
                  online.ip = "192.168.1.1";//  ==>برای حالت لوکال آی پی را دستی وارد کردم که فقط نتیجه را ببینیم
                  online.Insert();
                //  online.ip = GetLanIPAddress();//==>> در حالت واقعی باید از این متد استفاده کنیم
                   
                 // yourip.InnerText = GetLanIPAddress();//==>> در حالت واقعی باید از این متد استفاده کنیم
                  onlineuser.InnerText = Application["OnlineUsers"].ToString();
       
                   yourip.InnerText = "192.168.1.1";
                  todayonline.InnerText = online.selectomnlineuseer().ToString();
                  yesterdayonline.InnerText = online.yesterdayonline().ToString();
                  viweall.InnerText = online.viweall().ToString();
       
       
                  datef.InnerText = datef.InnerText.settime();//تاریخ شمسی
              }
       
              public String GetLanIPAddress()//متدی برای گرفتن ip
              {
       
                  String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
       
                  if (string.IsNullOrEmpty(ip))
                  {
                      ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                  }
       
                  return ip;
              }
          }
      }
      


      کار تمام شد برنامه اجرا کنید و از آن لذت ببرید
      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      • بنظر میرسه که توی پیج لود بازدیدکننده ها رو اضافه کردید.
        اگه بخواید تعداد بازدیدکننده رو ذخیره کنید، اشتباه، باید توی Session_start کار ذخیره رو انجام بدید.
        تشکر

      برای ارسال نظر ابتدا به سایت وارد شوید