درج - ویرایش - حذف - جستجو بر حسب نام - در پروژه ویندوزی
یه پروژه ویندوزی جدید به نام SqlWinApplication ایجاد کنین.
حالا ابزارهای زیر رو به فرم اضافه کنین به شرحی که در زیر اومده :
4 تا Button
2 تا Lable
2 تا Textbox
و از قسمت Date در Toolbox یه دونه DataGridView به فرم اضافه کنین بعد خاصیت های Name ,Text اونها رو طبق جدول زیر(جدول 1-7) تنظیم کنین و بعد چیدمان اونهارو مثل شکل 1-7 درست کنین.
|
نام ابزار |
Text |
Name |
|
Button1 |
درج |
btnInsert |
|
Button2 |
ویرایش |
btnUpdate |
|
Button3 |
حذف |
btnDel |
|
Button4 |
جستجو بر حسب نام |
btnSearch |
|
Textbox1 |
|
txtID |
|
Textbox2 |
|
txtName |
|
Lable1 |
ID: |
|
|
Lable2 |
Name : |
|
|
DataGridView |
|
grdTable1 |
جدول 1-7
شکل 1-7
خوب حالا نوبت کد نویسی هستش :
روی فرم کلیک راست کنین و از منو گزینه View Code رو انتخاب کنین .
حالا تو قسمت کد نویسی هستین.قبل از هر کاری Using مربوط به SQL رو در ابتدای کدتون قرار بدین :
using System.Data.SqlClient;
حالا یه تابع به نام Fill() تعریف کنین و کدهای زیر رو توش قرار بدین .به این شکل:
public void Fill()
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlDataAdapter ObjDataAdapter=new SqlDataAdapter("Select * From Table1", ObjConnection);
DataSet ObjDataSet = new DataSet();
ObjConnection.Open();
ObjDataAdapter.Fill(ObjDataSet, "Table1");
ObjConnection.Close();
grdTable1.AutoGenerateColumns = true;
grdTable1.DataSource = ObjDataSet;
grdTable1.DataMember = "Table1";
ObjDataAdapter = null;
ObjConnection = null;
}
حالا دوباره برگردین به قسمت Design یعنی همون قسمتی که مربوط به طراحی فرمتون هستش.بعد روی یه قسمت خالی یا روی نوار آبی رنگ بالایی فرم در حال طراحی تون دوبار کلیک کنین تا رخداد Load فرمتون ایجاد بشه حالا کد زیر رو توی این رخداد بنویسین :
private void Form1_Load(object sender, EventArgs e)
{
Fill();
}
اگر حالا برنامه رو اجرا کنین خواهین دید که در DataGridView فیلدهای جدول Table1 نشون داده میشه ولی هیچ داده ای در این جدول وجود نداره.
حالا ما باید کدهای مربوط به درج رکورد جدید رکورد جدید رو بنویسیم.برای اینکار روی Button ، درج دوبار کلیک کنین تا به رخداد کلیک اون برین و کد های زیر رو در داخل اون قرار بدین :
private void btnInsert_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection ("DataSource=Localhost;InitialCatalog=Sample;
IntegratedSecurity=True");
SqlCommand ObjCommand=new SqlCommand("Insert into Table1(ID,Name)Values(@ID,@Name)",ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID",txtID.Text);
ObjCommand.Parameters.AddWithValue("@Name",txtName.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
بعد از اینکار نوبت button ، ویرایش هستش.کد زیر رو برای این Button در رخداد کلیک مربوط به اون قرار بدین:
private void btnUpdate_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlCommand ObjCommand = new SqlCommand("Update Table1 Set Name=@Name Where ID=@ID;", ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID", txtID.Text);
ObjCommand.Parameters.AddWithValue("@Name", txtName.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
حالا نوبت Button ، حذف هستش کد زیر :
private void btnDel_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlCommand ObjCommand = new SqlCommand("Delete From Table1 Where ID=@ID;", ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID", txtID.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
و حالا نوبت Button ، جستجو بر حسب نام هستش :
private void btnSearch_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlDataAdapter ObjDataAdapter = new SqlDataAdapter("Select * From Table1 where Name=@Name", ObjConnection);
ObjDataAdapter.SelectCommand.Parameters.AddWithValue("@Name", txtName.Text);
DataSet ObjDataSet = new DataSet();
ObjConnection.Open();
ObjDataAdapter.Fill(ObjDataSet, "Table1");
ObjConnection.Close();
grdTable1.AutoGenerateColumns = true;
grdTable1.DataSource = ObjDataSet;
grdTable1.DataMember = "Table1";
ObjDataAdapter = null;
ObjConnection = null;
}
حالا وقت توضیح کد هایی هست که نوشتیم :
قبل از هر توضیحی یه کم در مورد DataGridView بگم.این کامپوننت همونطور که از نامش دیده میشه برای نمایش داده های یک جدول استفاده میشه.جدولی که این کامپوننت داده های اون رو نمایش میده در این برنامه از Dateset بدست میاد.حالا اگه توضیح کدهای مربوط به تابع Fill را بخونیم متوجه میشیم که چطور از این کامپوننت استفاده کنیم.
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlDataAdapter ObjDataAdapter=new SqlDataAdapter("Select * From Table1", ObjConnection);
DataSet ObjDataSet = new DataSet();
ObjConnection.Open();
ObjDataAdapter.Fill(ObjDataSet, "Table1");
ObjConnection.Close();
اولین کدی که نوشته شد کد تابع Fill بودش.در این کد ابتدا یک شی از کلاس SqlConnection بعد یک شی از کلاس SqlDataAdapter و بعد یک شی از کلاس Dateset ایجاد کردیم بعد با استفاده از متد Fill ، Dataset رو با جدولی به نام Table1 پر کردیم.
grdTable1.AutoGenerateColumns = true;
grdTable1.DataSource = ObjDataSet;
grdTable1.DataMember = "Table1";
بعد خاصیت AutoGenerateColumns ، DataGridView رو True کردیم تا سطره و ستون ها در این کامپوننت ایجاد بشن و منبع داده ای رو هم براش مشخص کردیم.
ObjDataAdapter = null;
ObjConnection = null;
بعد هم منابع رو آزاد کردیم.
در باره کد نوشته شده برای Button های درج ، ویرایش وحذف همشون یکی هستند وفقط قسمت دستورات Sql شون با هم فرق داره.چیزی برای توضیح وجود نداره.
SqlConnection ObjConnection = new SqlConnection ("DataSource=Localhost;InitialCatalog=Sample;
IntegratedSecurity=True");
SqlCommand ObjCommand=new SqlCommand("Insert into Table1(ID,Name)Values(@ID,@Name)",ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID",txtID.Text);
ObjCommand.Parameters.AddWithValue("@Name",txtName.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
باز هم در این کد ابتدا یک شی از کلاس SqlConnection بعد یک شی از کلاس SqlCommand ایجاد کردیم.بعد بامتد ExecuteNonQuery() دستورات رو اجرا کردیم وبعد با فراخوانی متد Fill() که خودمون تعریف کرده بودیم در واقع DataGridView رو یه بروزرسانی کردیم.
در باره کد جستجو بر حسب نام این توضیح رو بدم که کد عینا همان کد مربوط به تابع Fill() هستش تنها تفاوت در قسمت دستورات Sql هستش که یک شرط اضافه شده که یه پارامتر داره و اون پارامتر با استفاده از تابع AddWithValue از طریق Textbox ، txtName.Text به اون داده شده .
SqlDataAdapter ObjDataAdapter = new SqlDataAdapter("Select * From Table1 where Name=@Name", ObjConnection);
ObjDataAdapter.SelectCommand.Parameters.AddWithValue("@Name", txtName.Text);
یه پروژه ویندوزی جدید با نام SqlWinAppliaction2 ایجاد کنین و دقیقا همون طراحی که برای برنامه قبلی ایجاد کرده بودیم برای همین برنامه دوباره انجام بدین.
خوب اولین کاری که باید بکنیم اینه که پایگاه داده رو به برنامه Add کنیم.برای اینکار به مسیر زیر برین :
Data>Add New DataSource
حالا باید صفحه ای به شکل زیر داشته باشین(شکل 1-8) :
در این قسمت گزینه DataBase رو انتخاب و Next رو بزنین.
حالا به صفحه ای با شکل زیر می رسین :
اگه به شکل دقت کنین دو تا جا مشخص شده . اول دومی رو توضیح می دم :
2- اگه روی علامت + کلیک کنین با یه رشته کاملا آشنا روبرو میشین.بله درسته این همون رشته Connection String هستش
1-حالا اولی رو توضیح می دم رو New Connection کلیک کنین .اگه برای اولین بار باشه که به این قسمت میاین از شما سئوال خواهد شد نوع پایگاه دادتون رو مشخص کنین که باید گزینه Microsoft Sql Server رو انتخاب کنین.بعد از انتخاب این گزینه به صفحهای شبیه شکل (3-8) میرسین :
حالا مطابق شکل 3-8 توی کادر مربوط به Server Name بنویسین "Localhost" و راحتتر از اون میتونین فقط یه دونه علامت دات "." بزنین.این علامت همون معنی Localhost رو میده.
حالا از لیست Select Or enter a database name : پایگاه داده خودمون یعنی Sample رو انتخاب کنین.
بعد روی Ok کلیل کنین تا به صفحه ای شبیه شکل زیر برسین (شکل 4-8) :
تیک Table رو بزنین و با بقیه موارد کاری نداشته باشین با موارد بعدی در آینده آشنا خواهیم شد.حالا Finish رو کلیک کنین وتمام.
حالا به مسیر زیر برین تا قسمت Show DataSource به صفحه تون اضافه بشه(شکل 5-8):
Data>Show Data Source (Shift+Alt+D)
حالا در سمت راست تصویر میتونین پایگاه دادتون رو با تمام جدولهایی که درست کردین وفیلدهای اونها ببینین.
حالا روی DataGridView یکبار کلیک کنین.اگه دقت کنین در گوشه سمت راست بالا یک علامت سیاه مثلث مانند هستش.روی اون کلیک کنین.از منوی باز شده Choose Data Source رو انتخاب کنین و از لیست باز شونده اون یکی یکی موارد زیر رو انتخاب کنین :
Other Data Source>Project Data Source>SampleDateSet>Table1
حالا خواهین دید که فیلدهای موجود در جدول توی DataGridView قابل دیدن هستن.
اگر حالا برنامه رو اجرا کنین خواهین دید که توی DataGridView رکوردهای موجود در پایگاه داده دیده میشن
برای استفاده از یک database دو را وجود دارد: connected , disconnected
برای روش connected از کلاسهای XXXConnection و XXXCommand و XXXDataReader باید استفاده کرد.
برای حالت disconnected از کلاس XXXDataAdapter باید استفاده کرد در این حالت از سه کلاس گفته شده در روش connected به همراه آبجکت DataSet نیز میتوان استفاده کرد . (منظور از XXX ، sql , oldbمیباشد)
ADO.NET دارای دو آبجکت پایه است :
DataTable : یک شی است که در داخل خود شامل سطر و ستون است دقیقا مثل جدول
DataSet : یک شی است که میتواند مجموعه از دادههای مبدا را در خود نگهداری کند این شی در ADO بنام recordset شناخته میشود . یک DataSet از DataTable مختلف درست شده است و میتواند جداول متعددی از database مبداء را در خود نگه دارد.Data provider های متفاوت اجازه دسترسی به database های مخصوص به خود را میدهند. Data provider ها دارای کلاسهای پایه ای هستند که توسط آنها میتوان به داده ها دسترسی داشت.
کلاسهای اصلی برای دسترسی به database
Connection -1
از این کلاس برای اتصال به database استفاده میشود
Command -2
از این کلاس برای اجرای دستورات بر روی داده ها استفاده میشود این کلاس دارای متدهای متعددی از جمله ExecuteScalar ، ExecuteNonQuery ، ExecuteReader برای اجرای دستورات میباشد .
DataReader -3
از این کلاس تنها برای خواندن داده ها استفاده میشود .
DataAdapter
-4 از این کلاس برای پر کردن یا update یک data set بکار میرود . این کلاس یک پل بین data set و data source برقرار میکنه
-Constraint
این کلاس برای نشان دادن محدویتهای بکار رفته در یک شی DataColumn بکار میرود
ConstraintCollection -2
این کلاس همانطور که از اسمش پیدا است مجموعه ای از Constraint ها میباشد
DataColumn -3
این کلاس یک الگو یا طرح یا shema از ستونهای شی DataTable میباشد
DataColumnCollection -4
این کلاس همانطور که از اسمش پیدا است مجموعه ای از DataColumn ها میباشد
DataRelation -5
این کلاس برای نشان دادن یک رابطه parent-child بین دو جدول بکار میرود
DataRelationCollection -6
این کلاس همانطور که از اسمش پیدا است مجموعه ای از DataRelation ها میباشد
DataRow -7
این کلاس برای نشان دادن یک سطر از داده های درون یک جدول بکار میرود
DataRowCollection -8
این کلاس همانطور که از اسمش پیدا است مجموعه ای از DataRow ها میباشد
DataRowView -9
این کلاس شامل خواص مختلفی برای دیدن داده های درون DataRow میباشد
DataSet -10
این کلاس یکی از اصلی ترین کلاسها در ADO .NET میباشد این کلاس برای نشان دادن یک یا چند جدولی که از منبع داده ها در حافظه لود کردیم بکار میرود
DataTable -11
این کلاس یکی دیگر از اصلی ترین کلاسها در ADO .NET میباشد این کلاس برای نشان دادن جداولی است که از منبع داده ها در حافظه لود کردیم بکار میرود
DataView-12
با این کلاس میتوان یک نما دلخواه از DataTable را داشته باشیم منظور از نمای دلخواه sorting, filtering, searching, editing میباشد
DataViewManager -13
این کلاس شامل نماهای پیش فرض برای شی DataTable میباشد
ایجاد اتصال به یک Database
using System;
using System.Data.SqlClient;
namespace Client.Chapter_13___ADO.NET
{
class CreatingSQLConnections
{
static void Main(string[] args)
{
SqlConnection MyConnection =
new SqlConnection("Data Source=(local);"
+ "Initial Catalog" + "MyDatabase;"
+ "User ID=sa;Password=");
//Creates and opens a connection to the database
MyConnection.Open();
}
}
}
البته برای open کردن یک connection روش بهتر استفاده از کد زیر است
کد:
try
{
if (MyConnection.State != ConnectionState.Open)
MyConnection.Open();
}
catch (Exception ex)
{
MessageBox.Show( ex.Message);
}
برای شروع روی Button درج دوبار کلیک کنین تا رخداد کلیک این Button ایجاد بشه .حالا کدهای زیر رو داخل اون بنویسین:
private void btnInsert_Click(object sender, EventArgs e)
{
table1TableAdapter.Insert(txtID.Text, txtName.Text);
table1TableAdapter.Fill(sampleDataSet.Table1);
}
خوب.میبینین فقط دوخط و کار این Button تمام شد.
حالا نوبت Button ، ویرایش هستش . کدهای زیر رو به رخداد کلیک این button اضافه کنین:
private void btnUpdate_Click(object sender, EventArgs e)
{
table1TableAdapter.Update(sampleDataSet);
}
خوب اینم از این .فقط نکته ای که اینجا هستش اینه که ویرایش رو روی DataGridView انجام میدین و بعد Button ویرایش رو کلیک می کنین.
private void btnDel_Click(object sender, EventArgs e)
{
table1TableAdapter.Delete(txtID.Text, txtName.Text);
table1TableAdapter.Fill(sampleDataSet.Table1);
}
اینم از کد Button ، حذف .واقعا تفاوت سرعت رو فکر کنم می تونین درک کنین.
حالا نوبت می رسه به Button جستجو بر حسب نام.برای کد نویسی این قسمت اول باید با ویزارد چند تا کار انجام بدیم بعد بریم کد نویسی کنیم.که بازم کد نویسیش فقط 1 خط خواهد داشت.
حالا به شکل زیر(شکل 1-9) توجه کنین.جایی که با یه فلش مشخص شده رو کلیک کنین .و از منوی باز شده
Edit Query in Dataset Designer رو کلیک کنین.تا به شکل 2-9 برسین
توی قسمت مشخص شده در شکل 2-9 کلیک راست کنین و از منوی باز شده گزینه Add Query رو انتخاب کنین.
حالا شکل زیر رو خواهین دید
همونطور که می بینین سه تا گزینه وجود داره :
Use Sql Statements : استفاده از دستورات Sql
Create new stored procedure : ایجاد stored procedure جدید. stored procedure ها یه چیزی تو مایه های تابع ها هستند.میتونیم اونا رو یه بار بنویسیم و هر وقت لازم شده فراخوانی کنیم.
Use existing stored procedure : استفاده از stored procedure های موجود
حالا در بین اینها گزینه اول رو انتخاب کنین و Next رو بزنین تا به صفحه بعدی برین
اینجا هم گزینه های مختلفی وجود داره که همشون واضح هستن.فقط در مورد گزینه اول و دوم این توضیح رو بدم که اولی چیزی که نتیجه میده تعدادی سطر وستون هستش و دومی مقدار بازگشتی داره یعنی یه Value برمیگردونه و سطر و ستون بر نمیگردونه .
اینجا هم گزینه اول رو انتخاب کنین و Next رو بزنین تا به صفحه بعدی برین (شکل 5-9) :
شکل 5-9
یه دستور Select به طور پیش فرض اینجا هستش ولی اون چیزی که ما می خوائیم نیست پس کد زیر رو به انتهاش اضافه کنین یعنی کد Sql کلا به شکل زیر خواهد بود:
SELECT ID, Name FROM dbo.Table1 Where Name=@Name
توضیح این کد اینکه ما برای دستور Select یه شرط گذاشتیم که سطرهایی رو انتخاب کن که فیلد Name برابر پارامتر @Name باشه.
حالا Next رو بزنین تا به صفحه بعد برین.(شکل 6-9):
شکل 6-9
مقابل کادر Method Name بنویسن SearchByName بعد Finish رو بزنین.
خوب کار با ویزارد تموم شد حالا نوبت کد نویسی هستش.
در رخداد کلیلک Button جستجو بر حسب نام این کد ها رو بنویسین :
private void btnSearch_Click(object sender, EventArgs e)
{
table1TableAdapter.SearchByName(sampleDataSet.Table1, txtName.Text);
}
خوب تمام.اینم از برنامه مون.تکمیل شد.
حالا یه توضیح در باره کدها :
اگه دقت کنین در تمام کدهایی که امروز نوشتیم این قسمت تکراری هستش : table1TableAdapter
اگه به این قطعه کد دقت کنین می بینین که همون DataAdapter خودمون هستش.
چون ما با ویزارد پایگاه داده رو به برنامه اضافه کردیم بنابراین متدهای Insert() , Update() , Delete() , Fill() خودشون به صورت اتوماتیک ساخته شدن و ما فقط اونها رو فراخوانی کردیم.
در مورد جستجو هم ما اول خودمون یه متد درست کردیم بعد اونو فراخوانی کردیم
اول روی Button مربوط به این عمل دو بار کلیک کنین تا رخداد کلیک این Button ایجاد بشه و کد هایه زیر رو توی این رخداد بنویسین:
protected void btnInsert_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlCommand ObjCommand = new SqlCommand("Insert into Table1 (ID,Name) Values(@ID,@Name)", ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID", txtID.Text);
ObjCommand.Parameters.AddWithValue("@Name", txtName.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
برای عمل ویرایش هم کد هایه زیر رو توی رخداد کلیک Button مربوط به این عمل بنویسین:
protected void btnEdit_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlCommand ObjCommand = new SqlCommand("Update Table1 Set Name=@Name Where ID=@ID;", ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID", txtID.Text);
ObjCommand.Parameters.AddWithValue("@Name", txtName.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
برای عمل حذف هم کد زیر :
protected void btnDel_Click(object sender, EventArgs e)
{
SqlConnection ObjConnection = new SqlConnection("Data Source=Localhost;Initial Catalog=Sample;Integrated Security=True");
SqlCommand ObjCommand = new SqlCommand("Delete From Table1 Where ID=@ID;", ObjConnection);
ObjCommand.Parameters.AddWithValue("@ID", txtID.Text);
ObjConnection.Open();
ObjCommand.ExecuteNonQuery();
ObjConnection.Close();
Fill();
}
مهندسی نرم افزار کامپیوتر