درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
دوره های مرتبط
دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 27 قسط خریداری کنید
دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
مدرس: حسین احمدی
این دوره را در 78 قسط خریداری کنید
دوره آموزشی طراحی رابط کاربری با JavaFX
مدرس: hharddy
این دوره را در 13 قسط خریداری کنید
دوره آموزشی ساخت ربات تلگرام
مدرس: taghandiki
این دوره را در 8 قسط خریداری کنید
دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
مدرس: dr-iman
این دوره را در 13 قسط خریداری کنید
دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
مدرس: حسین احمدی
این دوره را در 23 قسط خریداری کنید
دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
مدرس: حسین احمدی
این دوره را در 11 قسط خریداری کنید
دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
مدرس: taghandiki
این دوره را در 20 قسط خریداری کنید
دوره تخصصی آموزش متن کاوی با ابزار NLTK
مدرس: taghandiki
این دوره را در 11 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
مدرس: مهدی عادلی
این دوره را در 17 قسط خریداری کنید

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

1 نظرات
43 بازدیدها
مشاهده تعداد بازدیدکنندگان با پروسیجر با معماری سه لایه
در این آموزش می خوایم با هم نمایش تعداد افراد بازدیدکندده رو در 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 کار ذخیره رو انجام بدید.
    تشکر

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

arrow