تور لحظه آخری
امروز : یکشنبه ، 15 مهر 1403    احادیث و روایات:  امام علی (ع):هر كس سه خصلت داشته باشد، دنيا و آخرتش سالم مى‏ماند: به خوبى فرمان دهد و خود به آن...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها




آمار وبسایت

 تعداد کل بازدیدها : 1821211130




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

پروژه ساخت و طراحی DLL و UserControl های مجید آنلاینی! -


واضح آرشیو وب فارسی:سایت ریسک: پروژه ساخت و طراحی DLL و UserControl های مجید آنلاینی! MDP 24 شهريور 1387, 09:51سلام به همه دوستان خوبم! از امروز می قصد دارم این بخش رو یکم پر جنب و جوش کنم . قراره که توی این تاپیک DLL ها و Usercontrol های دست ساز و مفید خدمون رو بزاریم و در موردش اطلاعات کاملی مثل : نام ورژن .Net کارایی کلاس های موجود سورس کد کامل تاریخ ساخت و ... رو بزاریم! می دونم همه می دنید ولی می خوام برای خودم یاد آوری کنم که: جدل ممنوع هست فقط پست ها در مورد Dll و Usercontol هست برای تشکر فقط از دکمه تشکر استفاده می کنیم! سوالی هم اگه داریم توی این تاپیک () بحث میشه روش! ممنون از همتون که کمکم می کنید! مسعود! stalker 15 آبان 1387, 08:01پس چی شد ؟ arman92 11 آذر 1387, 20:46ماژولی خودم طرای کردم : ماژول Counter (شمارشگر - آمار) برای وب سایت های .Net . این ماژول از 1 جدول استفاده می کنه و یک کلاس. کارکرد این ماژول به این صورت است که با هر بار لود (Load) شدن صفحه توسط کاربر ، مقداری را به یک فیلد از جدولی در دیتابیس اضافه می کند. هر روز ، برای خود یک فیلد دارد. به این معنا که با هر بازدید ، مقداری به فیلد روز مربوطه اضافه می شود. شناسه ی هر روز ، شماره ی آن روز از 365 روز سال است. برای مثال ، امروز ، روز 340 از 365 روز سال است (میلادی). این ماژول ، سه مقدار به صفحه بازمی گرداند : بازدید های امروز ، بازدید های دیروز ، بازدید های کل. جدول (Table) مورد نظر ما ، با نام Visits انتخاب شده است و دارای فیلد های زیرمی باشد : 1- "DayID" از نوع Int و Primary Key 2- "DayOfYear" از نوع Int 3- "Year" از نوع Int 4- "TodayVisits" از نوعBigint فیلد اول ، DayID برای مشخص کردن شناسه ی روز ، (سهولت در مدیریت با استفاده از شناسه ی روز) فیلد دوم ، برای مشخص کردن شماره ی روز از 365 روز سال فیلد چهارم ، سال حاضر فیلد پنجم ، تعداد بازدید های امروز Stored Procedure مورد نیاز : InsertNewDayToVisits : کار این SP ، اضافه کردن رکورد روز حاضر در جدول Visits است. (در صورت عدم وجود) آنچنان که پس از ساخت یک SP با نام InsertNewDayToVisits در دیتابیس ، محتوای آن را بدین صورت تغییر دهید : 1- ALTER PROCEDURE dbo.InsertNewDayToVisits 2- ( 3- @DayOfYear int, 4- @Year int, 5- @TodayVisits int = 1 6- ) 7- AS 8- SET NOCOUNT ON 9- Declare @LastDayID int 10- Set @LastDayID = (Select Max(DayID) From Visits) 11- IF @LastDayID IS Null 12- Begin 13- Set @LastDayID = 0 14- END 15- INSERT INTO [Visits] ([DayID], [DayOfYear], [Year], [TodayVisits]) 16- VALUES ((@LastDayID +1), @DayOfYear, @Year, @TodayVisits); سطر های 3 تا 5 ، پارامتر های مورد نیاز را Declare می کنند. سطر 9 ، پارامتر را به صورت محلی ایجاد می کند( از نوع داده ای عدد صحیح). سطر 10 ، بیشترین مقدار DayID را از جدول Visits می خواند و در پارامتر ایجاد شده قرار می دهد. سطر 11 ، در صورتی که تا کنون فیلدی در جدول ساخته نشده است ( برای اولین بار ماژول اجرا می شود) ، پارامتر ایجاد شده را برابر با صفر قرار می دهد. سطروط 15 و 16، مقادیر را در جدول درج می کند. بدین صورت که پارامتر @LastDayID را بعلاوه ی 1 می کند و سپس در جدول قرار می دهد. حالا به شرح کلاس و متد های عملگر می پردازیم : کلاسی با نام Counter در پروژه ایجاد می کنیم .(روی پوشه ی App_Code راست کلیک کرده ، New Item را انتخاب و آیتم Class را انتخاب کنید. نام فایل را Counter انتخاب کنید.) در قسمت NameSpace های کلاس ، System.Data.SqlClient را اضافه کنید. بدین صورت : using System.Data.SqlClient; در کلاس Counter فیلد های مورد نیاز در کلاس را مشخص می کنیم : private static string _connectionString = ConfigurationManager.ConnectionStrings["VinDBConnectionString"].ConnectionString; public static string ConnectionString { get { return _connectionString; } } private static string _prevDayVisits = ""; public static string PrevDayVisits { get { return _prevDayVisits; } set { _prevDayVisits = value; } } private static string _todayVisits = ""; public static string TodayVisits { get { return _todayVisits; } set { _todayVisits = value; } } // Declaring the most used Objects : static int dayOfYear = DateTime.Now.DayOfYear; static int year = DateTime.Now.Year; public static SqlConnection con = new SqlConnection(ConnectionString); public static DataSet dSet = new DataSet(); public static DataRow dRow; public static SqlDataAdapter dAdabter = new SqlDataAdapter(); فیلد اول که با نام ConnectionString نام گذاری شده است ، رشته ی اتصال را از فایل Web.Config گرفته و در فیلد ConnectionString قرار می دهد. توجه کنید که در اینجا ، نام رشته ی اتصال در فایل Web.Config ، VinDBConnectionString است ؛ لذا شما می بایست نام رشته ی اتصال خود را در این قسمت وارد کنید. فیلد PrevDayVisits ، برای Set کردن و گرفتن تعداد بازدید های روز قبل به کار می رود که در متد هایی که بعداً خواهیم نوشت ، مقدار دهی و استفاده می شود. فیلد TodayVisits ، برای Set کردن و گرفتن تعداد بازدید های روز حاضر استفاده می شود. متغیر dayOfYear ، که از نوع عدد صحیح می باشد ، برای گرفتن شماره ی روز حاضر و متغیر year که نیز از نوع عدد صحیح است ، برای گرفتن سال حاضر به کار می رود. شی con از نوع SqlConnection برای اتصال به دیتابیس به کار می رود و با فیلد ConnectionString که در بالا ساختیم ، مقدار دهی می شود. شی dSet از نوع DataSet برای قرار دادن Table ها و شی dRow از نوع DataRow برای مشخص کردن سطر های جدول. شی dAdabter از نوع DataAdabter برای عمیلات Fill در dSet. پس از اعلان فیلد ها و متغیر های مورد نیاز ، به متد های عملگر می رسیم : متد GetTodayVisits() از نوع string. این متد ، همانطور که از نامش پیداست ، کار گرفتن بازدید های روز حاضر را از دیتا بیس انجام می دهد. در صورتی که تا کنون هیچ بازدیدی نشده (در روز حاضر) متد دیگری را با نام CreateTodayRow()فراخوانی می کند که کار ساختن سطر مربوط به روز حاضر را انجام می دهد. public static string GetTodayVisits() { 1- SqlCommand getCmd = new SqlCommand(); 2- getCmd.CommandText = "Select TodayVisits From Visits Where(DayOfYear = " + dayOfYear + ") And (Year = " + year + ")"; 3- getCmd.Connection = con; 4- dAdabter.SelectCommand = getCmd; 5- dSet.Clear(); 6- dAdabter.Fill(dSet, "Visits"); 7- if (dSet.Tables[0].Rows.Count == 1 ) 8- { 9- dRow = dSet.Tables[0].Rows[0]; 10- int todayVisits = Convert.ToInt32(dRow["TodayVisits"].ToString()); 11- PurseTodayVisits(todayVisits); 12- TodayVisits = todayVisits.ToString(); 13- return TodayVisits; 14- } 15- if (dSet.Tables[0].Rows.Count == 0) 16- { 17- CreateTodayRow(); 18- return "1"; 19- } 20- return TodayVisits; } سطر 1 ، شی getCmd را از نوع SqlCommand ایجاد و مقدار دهی می کند. سطر 2 ، خاصیت فرمان (CommandText) ، getCmd را مشخص می کند. (تعداد بازدید های امروز را از دیتابیس انتخاب می کند ، به شرطی که شماره ی روز و سال آن ، با متغیرهای dayOfYear و year برابر باشند) سطر 3 ، شی اتصال را مشخص می کند. سطر 4 ، خاصیت SelectCommand شی dAdabter را برابر با getCmd قرار می دهد. سطر 5 ، جدول های داخل dSet را پاک می کند. سطر 6 ، dSet را با جدولی که از دیتابیس بازگردانده می شود ، پر می کند. سطر 7 ، ساختار شرطی if – else را نمایان می کند که در صورت عدم وجود سطر روز حاضر ، متد CreateTodayRow را فرا خوانی می کند (سطر 17) و در غیر اینصورت ، شی dRow را با سطری که از دیتا بیس در dSet ذخیره شده است مقدار دهدی می کند (سطر 9). در سطر 10 ، متغیر todayVisits را ایجاد و با فیلد TodayVisits که در شی dRow وجود دارد مقدار دهی می کنیم. در سطر 11 ، متد PurseTodayVisits فراخوانی می شود و متغیر todayVisits به صورت پارامتر برایش ارسال می شود. فیلد در سطر 12 ، TodayVisits که در اول کلاس تعریف شد ، با متغیر todayVisits مقدار دهی می شود. در سطر 13 ، فیلد TodayVisits که مقدار دهی شده است به صفحه بازگردانده می شود. در سطر 15 ، ساختار شرطی if مشخص می کند در صورتی که هیچ رکوردی برای روز حاضر در جدول وجود ندارد ، ابتدا متد CreateTodayRow() را فراخوانی و سپس مقدار 1 را به عنوان بازدید های امروز بازمی گرداند. شرح متد GetTodayVisits() به پایان رسید. اکنون به توضیح متد CreateTodayRow() می پردازیم : public static void CreateTodayRow(){SqlCommand crtCmd = new SqlCommand();crtCmd.CommandText = "InsertNewDayToVisits";crtCmd.Connection = con;crtCmd.CommandType = CommandType.StoredProcedure;crtCmd.Parameters.AddW ithValue("DayOfYear", dayOfYear);crtCmd.Parameters.AddWithValue("Year", year);con.Open();10.crtCmd.ExecuteNonQuery(); 11.con.Close(); 12.} در سطر 3 ، شی crtCmd را ایجاد می کنیم. و سپس دستور آن را برابر با InsertNewDayToVisits قرار می دهیم که همان Stored Procedure ای هست که در اول مبحث توضیح داده شد. سپس ، اتصال این SqlCommand را برابر با con می گذاریم که در اول کلاس تعریف شد. سپس نوع دستوری شی crtCmd را برابر با StoredProcedure قرار می دهیم. سپس چون در SP به دو پارامتر DayOfYear و Year نیاز داریم ، آنها را بصورتی که در خطوط 7 و 8 آمده است ، اضافه و مقدار دهی می کنیم. در سطر 0 ، شی اتصال خود را باز می کنیم. سپس با استفاده از متد ExecuteNonQuery() ، تغییرات را در دیتا بیس اعمال می کنیم. در آخر کار نیز شی اتصال را می بندیم. متد PurseTodayVisits ، کار اضافه کردن مقدار 1 را به رکورد روز حاضر انجام می دهد. زیرا با هر بازدید از صفحه ، می بایست تعداد بازدید ، بعلاوه ی 1 شود. این متد به یک پارامتر به نام todayVisitsنیاز دارد که توسط متد GetTodayVisits() به آن پاس داده می شود. این پارامتر ، بازدید های امروز را مشخص می کند. public static void PurseTodayVisits(int todayVisits){todayVisits = todayVisits + 1 ;SqlCommand purseCmd = new SqlCommand();purseCmd.Connection = con;purseCmd.CommandText = "Update [Visits] Set [TodayVisits] = " + todayVisits.ToString() + " Where(([DayOfYear] =" + dayOfYear + "))" ;con.Open();purseCmd.ExecuteNonQuery();con.Close() ;10.} در سطر 3 ، مقدار پارامتر را بعلاوه ی 1 می کنیم. در سطر 4 ، شی purseCmd را از نوع SqlCommand ایجاد می کنیم. سپس اتصال آن را برابر با con قرار می دهیم. در سطر 6 ، دستور شی را به شکلی می نویسیم که فیلد TodayVisits ، در رکورد مربوط به روز حاضر را مساوی مقدار پارامتر (بعلاوه 1) کند. در سطر 7 ، اتصال را باز می کنیم. در سطر 8 ، با استفاده از متد ExecuteNonQuery() ، دستورات را اجرا می کنیم. سپس اتصال را می بندیم. در اینجا به شرح متد GetPrevDayVisits() می پردازیم ، همانطور که از نامش پیداست ، این متد کار گرفتن بازدید های روز قبل را انجام می دهد. public static string GetPrevDayVisits(){SqlCommand prevDCMD = new SqlCommand();prevDCMD.Connection = con;prevDCMD.CommandText = "Select Top(2) TodayVisits, DayOfYear From Visits Order By DayID DESC";dSet.Clear();dAdabter.SelectCommand = prevDCMD;dAdabter.Fill(dSet, "Visits");dRow = dSet.Tables[0].Rows[1];10. int lastDay = dayOfYear - 1; if (Convert.ToInt32(dRow["DayOfYear"].ToString()) == lastDay) {string prevDayVisits = dRow["TodayVisits"].ToString();PrevDayVisits = prevDayVisits;return PrevDayVisits;}else {return "0";}return PrevDayVisits;} در سطر 3 ، شی prevDCMD را برای معین کردن دستور Select ایجاد می کنیم. در سطر 5 ، متن دستور شی را مشخص می کنیم. بدین صورت که دو رکورد اول را از دیتابیس با دو فیلد TodayVisits و DayOfYear ، Select می کنیم. Order By DayID DESC مشخص می کند که به صورت نزولی ، 2 رکورد را بر حسب شناسه روزشان مرتب می کند. یعنی اگر دو رکورد با DayID های 5 و 6 داشته باشیم ، اول 6 و سپس 5 مرتب می شوند. سپس با استفاده از متد Clear() ، جدول های موجود از قبل در DataSet را پاک می کنیم. در سطر 7 ، خاصیت SelectCommand شی dAdabter را برابر با prevDCMD قرار می دهیم. و در سطر بعد ، dSet را از جدولی که از دیتابیس بازگردانده می شود ، پر می کنیم. در سطر 10 ، تغیر lastDay را از نوع عدد صحیح تعریف کرده و مقدار را برابر با متغیر dayOfYear منهای 1 قرار می دهیم (یعنی روز قبل از امروز). در سطر 11 ، ساختاری شرطی را ملاحظه می کنیم در صورتی که شماره ی روز رکورد بازگردانده شده ، مساوی lastDayبود ، متغیری از نوع رشته تعریف و با فیلد TodayVisits مقدار دهی می شود. سپس در سطر 14 ، فیلد PrevDayVisits که در اول کلاس معرفی شد ، با متغیر prevDayVisits مقدار دهی می شود. سپس مقداری که در فیلد PrevDayVisits قرار گرفته است ، به صفحه بازگردانده می شود. در صورتی که شرط بالا برقرار نبود ، مقدار 0 بازگردانده می شود. یعنی در روز قبل ، هیچ بار وب سایت بازدید نشده است. در سطر 20 نیز برای کاهش دادن درصد خطای برنامه ، دوباره فیلد PrevDayVisits را به صفحه بازمیگردانیم. آخرین متد نیز ، کار جمع کردن همه ی بازدید ها و بازگرداندن آن را به صفحه انجام می دهد : public static string GetSumVisits(){dSet.Clear();SqlCommand getSumCmd = new SqlCommand();getSumCmd.Connection = con;getSumCmd.CommandText = "Select Sum(TodayVisits) as TotalVisits From Visits";dAdabter.SelectCommand = getSumCmd;dAdabter.Fill(dSet, "Visits");dRow = dSet.Tables[0].Rows[0];10.string totalVisits = dRow["TotalVisits"].ToString(); 11.return totalVisits; 12.} در سطر 3 ، جدول های موجود را در dSet پاک می کنیم. شی getSumCmd را ایجاد ، شی اتصال آن را مشخص می کنیم و سپس در سطر 6 ، با استفاده از دستور Sum ، مجموع تعداد بازدید ها را از جدولVisits ، Select می کنیم. در خط 10 ، متغیر totalVisits را از نوع رشته ایجاد می کنیم و با فیلد TotalVisits که از دیتابیس بازگردانده شده است را مقدار دهی می کنیم. در آخر نیز در سطر 11 ، متغیر totalVisits را به صفحه باز می گردانیم. تا اینجا ، کار ساختن کلاس و متد ها تمام شد. حالا باید از این کلاس در صفحه استفاده کنیم. برای مثال ، من در MasterPage وبسایتم ، این کلاس را به کار گرفتم. در این صورت با هر بار لود شدن صفحه ، به بازدید های وب سایت اضافه می شود. برای این کار ابتدا در صفحه ی مورد نظر ، Label هایی با نام های : todayVisits ، prevDayVisits و totalVisits ایجاد کنید. سپس درCode Behind صفحه ، در رویداد (Event) Page_Load به صورت زیر ، متن Label های ایجاد شده را مقدار دهی کنید : todayVisits.Text = Counter.GetTodayVisits(); prevDayVisits.Text = Counter.GetPrevDayVisits(); totalVisits.Text = Counter.GetSumVisits(); بسیار خب ، کار تمام است. در صورتی که اشتباهی پیش نیامده باشد ، این کلاس باید بدرستی کار کند. در آخر ، فایل های این ماژول را برای دسترسی راحت تر به کد ها در زیر قرار می دهم. کلاس Counter در فایلی به نام Counter.cs در پوشه ی App_Code قرار دارد. شما نیز باید این فایل را در پوشه ی App_Code پروژه ی خود قرار دهید. فایل Default.aspx نیز کارکرد ماژول را نمایش می دهد. البته در صورتی که تمام مراحل را بدرستی و کامل انجام داده باشید. (تنظیمات ConnectionString در فایل Web.Config ، Stored Procedure ، Table و کلاس Counter) لینک دریافت فایل ها : لینک دانلود آموزش ساخت این ماژول به صورت ورد (doc.) : دوستان من که نفهمیدم ! چرا این ادیتور ویبولیتن اینجوری می کنه با ما! از مدیر محترم درخواست دارم این مطلب رو خودشون ویرایش کنن. ممنون. lolita&tiyam 01 بهمن 1387, 16:14چگونه میشه تو c# ارایه تعریف کرد واسم با یک مثال توضیح بدید لطفا مثل دریافت نام و نام خوانوادگی با ارایه و نمایش ان ها و امکان جستجوی ان ها تا7 بهمن فرصت دارم ممنون milade 01 بهمن 1387, 16:30سلام اولا اینجا جای این سوالات نیست . یعنی بخشش نیست ! بهتره از هش تیبل استفاده کنی در حال اگه اطلاعات بیشتری میخوای تاپیک جدید بزن تا بگم ف وگرنه پستت به وسیله مدیر که پاک میشه هیچ ، جریمه هم داری ! پس این پستت رو پاک کن ، و تاپیک جدید بزن تا جواب بدم (این پست برای این ارسال شد چون پیام خصوصی این کاربر بسته بود :d ) saberahmady 01 اسفند 1389, 12:34کاری کرده قشنگ و ساده است بهتر بود از try, catch هم استفاده می کردید تا خطاهای احتمالی مثلا باز کردن کانکشنی که هنوز بسته نشده هم رفع می شد در هر صورت ممنون در ضمن لینک فایل هم خراب است




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 869]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن