PDA

View Full Version : آموزش: آموزش ساخت آمار سایت با استفاده از گلوبال وذخیره در دیتابیس



sasanrstm
دوشنبه 13 آذر 1391, 00:24 صبح
سلام به همه دوستان برنامه نویس چون تو سایت هر چی گشتم آموزش کاملی در مورد آمار گیری نبود خواستم این آموزش را بزارم البته خودم هنوز تو یه قسمت مشگل دارم که امیدوارم با کمک دوستان دیگه رفع بشه اما تا جائیکه میدونم همینجا قرار میدماولا یه جدول درست میکینیم تو اسکیوال سرور با مشخصات id که بتون تاریخ رو بصورت سال وماه وروز نگه داره و میتونید نوعش رو int یا nvarchar انتخاب کنید اگه دوستان مایل باشن بقیه آموزش رو هم میزارم فقط خواهشن تشکر یادتون نره
http://www.srstm.ir
95935

sasanrstm
دوشنبه 13 آذر 1391, 00:46 صبح
قدم دوم اضافه کردن گلوبال به پروژه است که فکر کنم همه اینو بلدن

<%@ Application Language="C#‎‎" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Application["OnlineUsers"] = 0; این قسمت مربوط به کاربران انلاین هست که بعدا ازش استفاده خواهیم کرد
}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs

}

void Session_Start(object sender, EventArgs e)
{
//Code that runs when a new session is started
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1; این قسمت مربوط به کاربران انلاین هست که بعدا ازش استفاده خواهیم کرد
Application.UnLock();
try
{
string conn = WebConfigurationManager.ConnectionStrings["hasan"].ConnectionString;
string b = PersianDate.Now.AddHours(2).AddMinutes(30).ToLongT imeString();
DateTime d = DateTime.Now;
string g = d.ToString("yyyy MM dd hh:mm");
string s = d.ToString("yyyy");
int sal = int.Parse(s.ToString());
string m = d.ToString("MM");
int mah = int.Parse(m.ToString());
string r = d.ToString("dd");
string hour = d.ToString("hh");
string miute = d.ToString("mm");
int hh = int.Parse(hour.ToString());
int min = int.Parse(miute.ToString());
int roz = int.Parse(r.ToString());
string ip = Request.UserHostAddress;
int conter = 1;
SqlConnection con2 = new SqlConnection(conn);
SqlCommand cmd2 = new SqlCommand("insert into TB_AmarDay(sal,mah,roz,ip,count,hour,minute,date_s hamsi)values(@sal,@mah,@roz,@ip,@count,@hour,@minu te,@date_shamsi)", con2);
cmd2.Parameters.AddWithValue("@sal", sal);
cmd2.Parameters.AddWithValue("@mah", mah);
cmd2.Parameters.AddWithValue("@roz", roz); در این قسمت مشخصات کاربرانی که وارد سایت شدن در دیتابیس ذخیره بشه
cmd2.Parameters.AddWithValue("@ip", ip);
cmd2.Parameters.AddWithValue("@count", conter);
cmd2.Parameters.AddWithValue("@hour", hh);
cmd2.Parameters.AddWithValue("@minute", min);
cmd2.Parameters.AddWithValue("@date_shamsi",b);
con2.Open();
cmd2.ExecuteNonQuery();
con2.Close();
}
catch
{
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
} این قسمت باعث میشه که یکی از تعداد کاربران آنلاینی که از سایت خارج شدن کمه بشه در آمار
</script>

این کد ها باعث میشه ورود هر کاربر جدید در دیتابیس ذخیره بشه من تاریخ رو تبدیل به int کرده و ذخیره میکنم روز وماه وسال را هر کدام جداگانه که بعدا بشه ازش استفاده کرد
در ضمن آیدی جدول رو کلید اصلی انتخاب میکنیم و آیدنتتی بابر yes البته میتونین چیزهای دیگه ای هم در دیتابیس ذخیره کنید

sasanrstm
دوشنبه 13 آذر 1391, 00:50 صبح
ادامه دارد ؟ فعلا با اجازه

fakhravari
دوشنبه 13 آذر 1391, 01:28 صبح
http://barnamenevis.org/showthread.php?305737-%D8%A2%D9%85%D8%A7%D8%B1-%D8%A8%D8%A7%D8%B2%D8%AF%D9%8A%D8%AF-%D9%88-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D8%A2%D9%86%D9%84%D8%A7%D9%8A%D9%86/page5

sasanrstm
دوشنبه 13 آذر 1391, 02:05 صبح
آقای فخراوری ممنون برادر من این برنامه شمارو قبلا دیدم یه چند تا دوست دیگه هم dll با xml گذاشتن البته نمیدونم برنامه شما که کارنکرد چند تا خطا داد آخرش هم بنده بی خیالش شدم دیما من نوشتم ذخیره در دیتابیس که هر چیزی رو بتونی ذخیره کنی تو مواقع لزوم هم هرچی بخوائی سلکت کنی اگه دوست داشتی کمک کنی تو یه قسمتی هست که می خوام کمک کنی در ضمن این آموزش واسه مبتدی ها هم خوبه در ضمن اگه اون برنامتو اصلاح کنی که تو 2008 هم کار کنه ممنون میشم ازت. دات نت 4 میخواد برنامتون؟

fakhravari
دوشنبه 13 آذر 1391, 02:43 صبح
عزیز دل انگار خوب ندیدی پست شماره 41
نیازی به هیچی نداره.
در پست شماره 1 که برنامه اقای هاشمی روی net 3.5 کار میکنه. اما اینی که در پست 41 کاربرد همون داره ولی روی همه روژن ها میخوره.
خطای چی؟؟

sasanrstm
دوشنبه 13 آذر 1391, 23:30 عصر
ادامه مطلب:
حالا می خواهیم با سلکت از جدول آمار هائی که دوست داریم از جدول بدست بیارم اینجا دوتا کد مینویسم که شما میتونید اونو تو صفحه اول سایتتون هم قراربدین تا خود گلوبال یا میتونین حتی در یه جدول دیگه ذخیره کنین یکی از کدها برای بدست آوردن امار بازدید امروز ودیگری آمار بازدید دیروز است
برای بدست آوردن آمار امروز


try
{
string conn = WebConfigurationManager.ConnectionStrings["hasan"].ConnectionString;
DateTime d = DateTime.Now;
string g = d.ToString("yyyy MM dd hh:mm");
string r = d.ToString("dd");
string m = d.ToString("MM");
string hour = d.ToString("hh");
string miute = d.ToString("mm");
int hh = int.Parse(hour.ToString());
int min = int.Parse(miute.ToString());
int mm = int.Parse(m.ToString());
int p = int.Parse(r.ToString());
int mah2 = mm - 1;
int amroz = p;
int diroz = p - 1;

SqlConnection con1 = new SqlConnection(conn);
SqlCommand cmd1 = new SqlCommand("select count(*) from TB_AmarDay where mah='" + mm + "' and roz='" + amroz + "'", con1);
con1.Open();
int cnt1 = int.Parse(cmd1.ExecuteScalar().ToString());
con1.Close();


که میتونید در صفحه اول یه لیبال بزارین و کد آمار رو در اون لیبل نشون بدین


label1.text=cnt1.tostring();

برای بدست آوردن آمار دیروز هم کدی مثل کد بالا مینویسیم فقط تو شرط روز را برابر dirox قرار میدیم


SqlConnection con25 = new SqlConnection(conn);
SqlCommand cmd25 = new SqlCommand("select count(*) from TB_AmarDay where mah='" + mm + "' and roz='" + diroz + "'", con25);
con25.Open();
int cnt2 = int.Parse(cmd25.ExecuteScalar().ToString());
con25.Close()
}
catch
{
}

ali_mnkt
دوشنبه 13 آذر 1391, 23:58 عصر
دوستان من در این روش گرفتن آمار با یک مشگل مواجه می شم و اون اینه که هر وقت که مرورگر بسته می شه متد Session_Start اجرا میشه و اون رو یک کاربر جدید در نظر می گیره. کسی می تونه کمک کنه که چطور این مشگل رو حل کنم ؟

sasanrstm
سه شنبه 14 آذر 1391, 00:04 صبح
دوستان من در این روش گرفتن آمار با یک مشگل مواجه می شم و اون اینه که هر وقت که مرورگر بسته می شه متد Session_Start اجرا میشه و اون رو یک کاربر جدید در نظر می گیره. کسی می تونه کمک کنه که چطور این مشگل رو حل کنم ؟
شاید اون قسمت آخر که یکی کم میکنه از امار موجود منظورم این قسمت نمیزاری


void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
} این قسمت باعث میشه که یکی از تعداد کاربران آنلاینی که از سایت خارج شدن کمه بشه در آمار

Ice_Star
چهارشنبه 04 دی 1392, 21:36 عصر
با سلام
من دقیقا از همین روش برای آمار سایتم استفاده کردم ، ولی چند وقتی هست که ظاهرا فایل global.asax من روی هاست اصلا اجرا نمی شه ولی Local اجرا میشه!
فایل های ساخته شده در Bin رو هم آپلود کردم.
لطفا در این زمینه راهنمایی کنید.
با تشکر

fakhravari
چهارشنبه 04 دی 1392, 21:38 عصر
وقتی سایت رفرش بشه global عمل میکنه
احتمال زیاد بازدیدی نداشتید