ارسطو  عباسی
وبلاگ‌نویس، برنامه‌نویس وب و مدرس

آموزش مدیریت کاربران ( User Management ) در سی شارپ

چگونه کاربران را در سی شارپ مدیریت کنیم؟ در این دوره دو قسمتی می خوام چگونگی ساخت فرم ورود و فرم ثبت نام در یک برنامه نوشته شده با سی شارپ رو بهتون آموزش بدم. فقط یک قضیه قبل از آموزش رو بگم، من شخصا برای آموزش دادن زبان برنامه نویسی یا هر چیز دیگری، دوست دارم که اون رو در قالب یک پروژه در خدمتتون ارائه بدم تا اینکه دستورات رو جدا جدا بررسی کنم. خب بریم سراغ آموزش : در برنامه ویژوال استدیو یک پروژه از نوع WFA بسازید و دو تکست باکس و یک دکمه ورود و نوشته های مورد نظرتان را قرار بدید به این شکل:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
وب سایت توسینسو

خب بعد از طراحی فرممون باید قسمت بانک اطلاعاتی مربوط به برنامه رو درست کنیم برای اینکار من از SQL Server موجود در خود ویژوال استدیو استفاده می کنم. برای ساخت بانک اطلاعاتی مراحل زیر رو دنبال کنید. پنجره Server Explorer رو از منوی View فعال کنید می تونید از کلیدهای کنترلی CTRL+W+L هم استفاده کنید. بعد از اون روی گزینه Data Connections کلیک راست کنید و گزینه Add Connection … رو انتخاب کنید. Data Source رو Microsoft SQL Server Database File قرار بدید و روی گزینه Continue کلیک نمایید.

وب سایت توسینسو

بعد از اون در کادر Database File Name یک نام نوشته و سپس روی OK کلیک کنید. با این کار پنجره هشدار براتون ظاهر میشه که میگه این فایل قبلا وجود نداشته، می خوای یکی برات بسازم شما روی YES کلیک کنید. تا بانک اطلاعاتیتون در مسیر اسناد ویندوز ذخیره بشه.

وب سایت توسینسو

خب بعد از این کار در پنجره Server Explorer زیر منوی به Data Connections اضافه شده، که حاوی اطلاعات بانک اطلاعاتیتون هستش، اگر زیرمنوهای بانک اطلاعاتیتون رو مشاهده کنید می بینید که گزینه های مختلفی از جمله Tables, Views و... وجود دارند. شما ابتدا روی Tables کلیک راست کنید و گزینه Add New Table رو انتخاب کنید. خب در این قسمت جدولتون رو به راحتی می تونید بسازید محتویات جدول شما باید شامل سه فیلد باشه:

ID که به صورت پیش فرض وجود داره، username که نام کاربری هستش و password که برای رمز عبور استفاده میشه. خب مشخصات فیلد ID: Primary Key از نوع متغیر INT و از قسمت property ستون Id مقدار Identity رو برابر YES قرار بدید تا مقدار رو به صورت خودکار تولید کنه. مشخصات username, password رو هم از نوع Nvarchar(50) قرار دهید و تیک Allow Nulls را بردارید تا کاربر مجبور به وارد کردن اطلاعات بشه. خب در پایین صفحه برنامه می تونید نام جدول رو هم تغییر دهید:

CREATE TABLE [dbo].[مشخص کننده نام جدول]

و در آخر روی Update که با نقطه قرمز در تصویر زیر اومده کلیک کنید و در نهایت در کادر Preview Database Updates روی Update Database کلیک کنید.

وب سایت توسینسو
وب سایت توسینسو

خب حالا پنجره Server Explorer رو Refresh کنید و حالا زیر منوهای Tables رو نگاه کنید می بینید که جدولتان با موفقیت ساخته شده. برای وارد کردن اطللاعات داخل جدول به صورت پیش فرض فعلا این مراحل رو دنبال کنید. روی جدولتان کلیک راست کنید و گزینه Show Table Data را انتخاب کنید، حالا در این قسمت یک مقدار فرضی به نام کاربری و پسورد بدهید مواظب باشید فیلد مربوط به ID رو خالی بگذارید چون این مقدار به صورت خودکار وارد می شود.

وب سایت توسینسو

بعد از درج اطلاعات پنجره را بسته و حالا باید بانک اطلاعاتی که ساختید را به فرمتان متصل کنید، برای اینکار پنجره Data Sources را انتخاب کرده و روی گزینه Add new data source… کلیک کنید. در پنجره ظاهر شده Database را انتخاب کرده و روی گزینه Next کلیک کنید. در قسمت بعدی روی Dataset کلیک کنید و به قسمت بعدی بروید. حالا همانطور که می بینید بانک اطلاعاتی در لیست Data Connection پدیدار می گردد . البته اگر موجود نبود از قسمت New Connection می توانید اقدام به اتصال بانک اطلاعاتی کنید. بعد از انتخاب گزینه Next پیغامی شبیه به تصویر زیر برای شما نمایان می شود. این پیغام از شما می پرسد که آیا می خواهید بانک اطلاعاتی که ساختید را در پوشه خود نرم افزار هم کپی کنم یا خیر!

وب سایت توسینسو

مرحله بعدی نام کانکشن سترینگ شماست که پیشنهاد میکنم تغییر ندهید و روی Next کلیک کنید. بعد از این گزینه های موجود بانک اطلاعاتی را به شما نمایش می دهد، خب تیک گزینه های مورد نیاز (Tables) رو فعال کنید و روی Finish کلیک کنید. خب بانک اطلاعاتی هم به درستی به فرم پیوند داده شد، و شما باید تکست باکس ها را به فیلدهای مورد نظر اتصال بدید. مثلا تکست باکس مربوط به نام کاربری را به فیلد username بانک اطلاعاتی اصطلاحا بایند کنید. برای اینکار از خصوصیات تکست باکس ها زیر گزینه Data Bindings خصوصیت Text را برابر فیلد مورد قرار بدید. مثل تصویر زیر:

وب سایت توسینسو

در آخرین قسمت، باید کدنویسی های مربوط به دکمه ورود را بنویسیم. خب در ابتدا یک شرط قرار دهید تا اگر کاربر مقداری وارد نکرد و دکمه را انتخاب کرد هشداری نمایش داده شود مبنی براینکه مقدار نام کاربری یا پسورد اشتباه است، بسته به نیاز خود می توانید برنامه را هوشمند تر کنید:

if (textBox1.Text !="" && textBox2.Text != "")
            {
                int a, b;
                a = tblitproBindingSource.Find("Username", textBox1.Text);
                b = tblitproBindingSource.Find("Password", textBox2.Text);
                if (a != -1 && b != -1 && a == b)
                {
                    MessageBox.Show("ورود با موفقیت");
                }
                else
                {
                                       MessageBox.Show("مقادیر اشتباه") ;
                }
            }
            else
            {
                MessageBox.Show("خطا", "لطفا مقداری وارد کنید");
            }

توضیحات:

a = tblitproBindingSource.Find("Username", textBox1.Text);

این قسمت مقدار username را از textbox1.text دریافت کرده و آن را پیدا می کند. در صورتی که این مقدار را نیابد مقدار -1 را در a قرار می دهد.

 if (a != -1 && b != -1 && a == b)

این شرط برای این هستش که اگر مقادیر a , b برابر -1 نبودند ( یعنی پیدا شدند) و این مقادیر با هم در یک ستون بودند بعد پیغام موفقیت در ورود رو بگه در غیر این صورت بگه اشتباه کردید ! (البته توجه داشته باشید باید حتما تکست باکس ها رو به بانک اطلاعاتی بایند کرده باشید.) اما یک مشکل در صورتی که تکست باکس ها به بانک اطلاعاتی بایند شده باشند وقتی برنامه رو اجرا کنید مقادیر داخل تکست باکس ها پر هستند برای این کار باید در Form_Load برنامه دستورات زیر رو بنویسید:

textBox1.Clear();
textBox2.Clear();


در این قسمت می خوام چگونگی ساخت یک فرم ثبت نام در برنامه رو بهتون بگم، خب برای اینکار پروژه قبلی که در آموزش ساخت# ساختیم رو باز کنید یک دکمه جدید روی فرم ورودتون با نام ثبت نام قرار بدید.

وب سایت توسینسو

خب بعد از این کار از منوی Project روی آیتم Add new Windows Form کلیک کنید و یک فرم جدید با نام Form2.cs درست کنید. خب وارد فرم جدید بشید، و آیتم هایی که من در شکل زیر آوردم رو وارد کنید. ( بخاطر معماری ساده ای که در آموزش قبل برای بانک اطلاعاتیم قرار دادم در فرم ثبت نام فقط دو مقدار نام کاربری و رمز عبور را برای ثبت نام دریافت می کند شما می توانید بسته به سلیقه خود آیتم های دیگر را نیز اضافه کنید). خب به فرم اول برگردیم و کد نویسی لازم برای باز کردن فرم 2 بعد از انتخاب دکمه ثبت نام را انجام میدیم:

Form a = new Form2();
  a.Show();

توضیحات: یک متغیر از نوع Form با نام a ایجاد کردم و مقدار form2 رو در اون قرار دادم، حالا در خط بعد گفتم متغیر a که درش مقدار فرم2 هستش رو نمایش بده.

Form2

و حالا نوبت به کد نویسی اصلی برنامه در فرم 2 می رسه. خب ما برای ابتدا باید مقادیر نام کاربری و رمز عبوری رو که کاربر دریافت می کنه به بانک اطلاعاتی بفرستیم برای این کار من از تکنولوژی LINQ استفاده می کنم. خب ابتدا پنجره Server Explorer رو باز کنید (با استفاده از کلید های ترکیبی (CTRL + W+ L) و زیر منوهای بانک اطلاعاتیتون رو ظاهر کنید، حالا روی پوشه مربوط به Stored Procedures کلیک راست کرده و Add new Stored Procedure را انتخاب کنید.

پراسیجر

با انتخاب این گزینه فایل مربوط به پراسیجر شما ظاهر میشه، تمام محتویاتش رو پاک کنید و بجای اون این کدها رو قرار بدید

CREATE PROCEDURE dbo.regitpro  @Username nvarchar(50), @Password nvarchar(50)
AS
INSERT INTO tblitpro values(@Username,@Password)
Return

توضیحات:

  • دستور CREATE PROCEDURE یک پراسیجر می سازد.
  • دستور dbo.regitpro مشخص کننده نام پراسیجرمون خواهد بود.

و در ادامه خط اول دو تا فیلد مورد نظرمون همراه با نوعشون که در جلسه اول ساختیم.

INSERT INTO tblitpro values(@Username,@Password)

خب دستور اصلیمون هم خیلی واضح نوشته شده که insert کن داخل tblitpro (جدولی که جلسه پیش ساختیم) values هم مشخص کننده مقادیری که میخواهیم وارد کنیم و خط آخر هم که مقدار رو بازمیگردونه. و در آخر روی Update کلیک می کنیم. حالا باید این پراسجر رو به جدولمون ربط بدیم، برای این کار از منو روی Add New Item کلیک می کنیم و در پنجره ظاهر شده LINQ to SQL Classes رو انتخاب می کنیم.خب یک نام براش در نظر می گیریم،(به صورت پیش فرض یه اسم داره می تونید تغییرش ندید). خب بعد از این کار یک حالت دو ستونه ایجاد میشه که شما باید در ستون اولی یعنی سمت راست جدولتون رو از پنجره Server Explorer به داخل اون درگ کنید و برای ستون دومی در سمت چپ باید پراسیجرتون رو درگ کنید. خب LINQ رو ذخیره کرده و پس از اینکار به فرم2 برگردید.

LINQ

کدنویسی دکمه ثبت نام:

if (textBox1.Text != "" && textBox2.Text != "" && checkBox1.Checked == true)
            {
            }
            else
            {
                MessageBox.Show("خطا","لطفا تمام مقادیر را پر کرده و قوانین را بپذیرید");
            }

خب در اولین قسمت باید کاربر رو مجبور به ورود اطلاعات و تایید قوانین کنم. در شرط ذکر شده که اگر تکست باکس 1 و 2 خالی نبود و تیک گزینه فعال بود بیا یک کارهایی که در ادامه اشاره می کنم رو انجام بده در غیر اینصورت پیغام هشدار رو به کاربر نشون بده. خب اون کارهایی که در صورت تایید شرط اول باید انجام شه چی هستش؟ باید به برنامه بگم که مقادیر ورودی در تکست باکس 1 و 2 رو به بانک اطلاعاتی ارسال کنه!

var a = new DataClasses1DataContext();
a.regitpro(textBox1.Text, textBox2.Text);
this.tblitproTableAdapter.Update(this.iTPRO_DBDataSet.tblitpro);

خب در خط اول من یک متغیر از نوع var تعریف کردم و مقدار linq رو درش قرار دادم ، در خط دوم پراسیجر روی متغیر a اعمال کردم و در درون پرانتز مقدارهای ورودی username,password رو بهش دادم.در خط سوم یک بار بانک اطلاعاتی رو هم بروزرسانی کردم که مقادیر فیلدها آپدیت بشن.

  • یک نکته: در صورتی که خط سوم رو بنویسید ولی شیوه ذخیره سازی درون بانک اطلاعاتی رو معرفی نکنید داده ها به صورت موقت در حافظه ذخیره می شند و وقتی برنامه رو ببندید مقادیر پاک می شوند برای جلوگیری از این کار، در پنجره Solution Explorer در مشخصات مربوط به فایل Dataset.XSD مقدار Copy to Output Directory را برابر Copy If newer قرار بدید، البته اگر بانک اطلاعاتیتون که با پسوند .mdf هستش نیز در اونجا قرار داشت اون رو هم به همین حالت تنظیم کنید!
وب سایت توسینسو

(البته توجه داشته باشید باید حتما تکست باکس ها رو به بانک اطلاعاتی بایند کرده باشید.) اما یک مشکل در صورتی که تکست باکس ها به بانک اطلاعاتی بایند شده باشند وقتی برنامه رو اجرا کنید مقادیر داخل تکست باکس ها پر هستند برای این کار باید در Form_Load برنامه دستورات زیر رو بنویسید:

textBox1.Clear();
textBox2.Clear();

ارسطو  عباسی
ارسطو عباسی

وبلاگ‌نویس، برنامه‌نویس وب و مدرس

وبلاگ‌نویس، برنامه‌نویس وب، مدرس، علاقه‌مند به مطالعه علوم انسانی و هوش مصنوعی و چند تا چیز دیگه.

نظرات