پرسش و پاسخ های رایج درباره ی ADO.NET
یکشنبه 31 مرداد 1395در این مقاله سوالات مختلف به همراه پاسخ درباره ADO.NET قرار دارد ،که کمک فراوانی برای یادگیری و استفاده از آنها در مصاحبه ها میکند.
سوال 1: ADO.NET چیست؟
پاسخ 1: ADO مخفف Active Data Object و ADO.NET مجموعه ای از کتابخانه دات نت برای ADO است.
ADO.NET مجموعه ای از کتابخانه مدیریت استفاده شده توسط برنامه های دات نت برای ارتباط منبع داده با استفاده از یک درایور و یا ارائه دهنده میباشد
برنامه های سازمانی مسئولیت رسیدگی به مقدار زیادی از داده ها را دارد. این داده ها در درجه اول در پایگاه داده رابطه ای ، مانند اوراکل، SQL Server و Access و ... ذخیره می شوند. این پایگاه داده از ساختار زبان کوئری (SQL) برای بازیابی از داده ها استفاده میکند.
برای دسترسی به داده های سازمانی برنامه دات نت، یک رابط کاربری مورد نیاز بود. این رابط به عنوان پلی بین یک سیستم RDBMS و برنامه دات نت عمل می کند. ADO.NET مانند یک رابط است که برای اتصال برنامه های دات نت به سیستم های RDBMS ایجاد شده است .
در فریم ورک دات نت، مایکروسافت یک نسخه جدید به نام ADO.NET معرفی کرد. هر برنامه دات نت، یا مبتنی بر ویندوز و یا وب سایت، با استفاده از مجموعه ای قدرتمندی ازکلاس کتابخانه ADO.NET ،میتوانند با دیتابیس در ارتباط باشند. داده ها ی هر دیتابیس با استفاده از معماری متصل و یا غیر متصل میتوانند قابل دسترس باشند .
دو معماری ADO.NET
معماری متصل
معماری غیر متصل
فضای نام ADO.NET
سوال 2 : اجزای ADO.NET چیست؟
پاسخ 2 : اجزای ADO.NET سه حالت است: قطع یا غیر متصل ، مشترک و یا به اشتراک گذاشته شده و ارائه دهندگان داده (data providers) دات نت.
اجزای غیر متصل ،معماری ADO.NET اصلی را میسازند . شما می توانید از این کلاس ،با یا بدون ارائه دهندگان داده استفاده کنید. Shared، اجزای مشترک کلاس پایه ،برای ارائه دهندگان داده و مشترک برای تمامی ارائه دهندگان داده است. اجزای ارائه دهنده داده ها (data provider)به طور خاص برای کار با انواع مختلف منابع داده،طراحی شده اند. به عنوان مثال، ارائه دهندگان داده ODBC با منابع داده ODBC کار میکنند و ارائه دهندگان داده OLEDB با منابع داده OLE-DB کار میکنند.
شکل زیر نشان میدهد مدل اجزای ADO.NET چگونه با هم کار می کنند:
سوال 3 : چگونه ساختار DataSet را تعریف میکنید؟
پاسخ 3 : یک شیء DataSet از اجزای سازنده معماری غیر متصل می باشد. DataSet شامل مجموعه ای از جداول، سطرها، ستونها و روابط است.
DataSet شامل مجموعه ای از DataTable ها و DataTable شامل مجموعه ای از DataRows ، DataRelation و DataColumn هاست .
سوال 4 : Connection Pooling در ADO.NET چیست؟
پاسخ 4: Connection Pooling توانایی استفاده مجدد از اتصال به پایگاه داده را دارد . به این معنی که شما میتوانید استفاده مجدد را برای اتصال بیش از یک کاربر را فعال کنید.
ADO.NET از یک تکنیک به نام اتصال ادغام (Connection Pooling)، که هزینه باز و بسته شدن اتصالات رابه حداقل می رساند، استفاده میکند . به جای ایجاد ارتباطات جدید از همان connection string برای همه ارتباطات فعال ،استفاده میکند. اتصال ادغام ، شامل مدیر اتصال است که مسئول حفظ یک لیست و یا مخزن ، از اتصالات اینترنت در دسترس است که در یک connection strings داده شده است.
مثالی از Pooling
connection.ConnectionString = sqlConnectString + "Connection Timeout=30;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;"; //Open connection
رشته اتصال در فایل Web.config با Connection Pooling
<connectionStrings> <clear /> <add name="sqlConnectionString" connectionString="Data Source=mySQLServer;Initial Catalog=myDatabase;Integrated Security=True;Connection Timeout=15;Connection Lifetime=0;Min Pool Size=0;Max Pool Size=100;Pooling=true;" /> </connectionStrings>
ویژگی هایی از connection string pooling:
Connection Lifetime (طول عمر ارتباط) : مدت زمانی بر حسب ثانیه است ،که پس از ایجاد و پس از از بین رفتن اتصال در نظر گرفته میشود و به طور پیش فرض 0 است،و این نشان می دهد که اتصال درحداکثر تایم است.
Connection Reset : مشخص میکند که آیا هنگام حذف از لیست ، اتصال ریست میشود. به طور پیش فرض true است.
Load Balance Timeout: مدت زمانی بر حسب ثانیه است ، که قبل ازحذف ،میتواند در لیست اتصال راکد بماند.
Max Pool Size : حداکثر تعداد اتصالات مجاز در مخزن. به طور پیش فرض 100 است.
Min Pool Size :حداقل تعداد اتصالات نگهداری در مخزن. به طور پیش فرض 0 است.
Pooling: وقتی true است ، اتصال از مخزن مناسب قرار میگیرد ، و یا در صورت لزوم، ایجاد شده و به استخر مناسب اضافه میشود . به طور پیش فرض true است.
پرسش 5: تفاوت بین DataReader و DataSet چیست؟
جواب 5 :
سوال 6 : شیء SqlCommand چیست؟
پاسخ 6: SqlCommand حامل دستوری از SQL که لازم است بر روی پایگاه داده اجرا شود، میباشد.
،SqlCommand دستور command خاصیت CommandText را حمل میکند و از این خاصیت زمانی که SqlCommand برای هر یک از متد های اجرایی فرا خوانده میشود، استفاده میشود.
شی Command با استفاده از شی اتصال SQL queries اجرا میشود.
Querie می تواند در قالب متن درون خطی، Stored Procedures و یا دسترسی مستقیم به جدول باشد.
از ویژگی های مهم شی Command ، اجرای queries ها و Stored Procedure با پارامتر است .
سه متد مهم شی SqlCommand :
ExecuteScalar
ExecuteNonQuery
ExecuteReader
ExecuteReader() :داده ها را در کلاینت بصورت سطر برمیگرداند. این به طور معمول یک SQL select statement یا Stored Procedure که شامل یک یا بیشتر select statement ها است ،میباشد. این متد ،یک شی DataReader است که برای پر کردن یک شی و DataTable یا چاپ گزارش به طور مستقیم ،استفاده میشود و آنها رابرمیگرداند.
: ExecuteNonQuery()زمانی از این شیوه استفاده می شود که چندین ردیف تحت تاثیر قرار بگیرند . می توانید از ExecuteNoneQuery() برای وارد کردن ، بروزرسانی و حذف داده ها استفاده کنید. شماره ردیفهایی که هنگام اجرای عملیات DML یا Data Manipulation Language در دیتابیس تحت تاثیر قرار گرفته اند را بر میگرداند. اگر ردیفی تحت تاثیر قرار نگرفته باشد 1- را برمیگرداند، در غیر اینصورت اگر مقداری بزرگتر از 0 برگرداند آن ردیف در دیتابیس تحت تاثیر قرار گرفته است.
: ExecuteScalar() برای دریافت یک ردیف استفاده می شود . اگر داده ها بیشتر از یک ردیف باشد ،فقط مقدار ردیف اول را به ما می دهد. این روش از دیگر روشها سریعتر است. اگر نتیجه خالی باشد مقدار null را بر میگرداند و محدودیتی در آن وجود دارد که تنها 2033 کاراکتر را می تواند بازگرداند
سوال7 : Data Reader، Dataset و Data Adapterچیست؟ تفاوتهای آنها را بیان کنید
Data Reader
Data Reader برای خواندن اطلاعات از دیتابیس استفاده میشود (تنها حالت دستیابی read را دارد و در آن حالت نمی توان داده ای نوشت)وفقط با معماری اتصال گرا ، اطلاعات را میخواند و فوروارد میکند و داده ها را از دیتابیس واکشی میکند. Data Reader از طریق result set به سرور میرود و یک رکورد را در یک زمان میخواند ، برای همین مصرف حافظه کمتر خواهد شدو واکشی داده ها در مقایسه با Dataset خیلی سریعتر است.
using(SqlConnection con = new SqlConnection("Connectionstring")) { con.Open(); SqlCommand cmd = new SqlCommand("Select UserName,LastName,Location FROM UserInformation", con); SqlDataReader dr = cmd.ExecuteReader(); }
DataSet یک معماری غیر اتصال گرا است ،به این معنی که به ارتباط فعال در طول کار با dataset ها و مجموعه ای از Data Tables و روابط بین جداول نیاز ندارد .از آن برای نگهداری چندین جدول با داده استفاده میشودو چندین سطر را در یک زمان نگهداری می کند. همچنین مجموعه داده ویژگی های غنی مانند ذخیره سازی داده ها با XML و بارگذاری داده ها ی XML را فراهم میکند.
SqlCommand cmd = new SqlCommand("select UserName,LastName,Location from UserInformation", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds);
DataAdapter
dataadapter به عنوان یک پل بین DataSet پایگاه داده عمل می کند. این شی data adapter برای خواندن اطلاعات از پایگاه داده و اتصال داده ها به DataSet استفاده می شود . Dataadapter در معماری غیر اتصال گرا است.
SqlCommand cmd = new SqlCommand("select UserName,LastName,Location from UserInformation", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds);
سوال 8: شی data adapter در ADO.NET چیست؟
از DataAdapter برای اتصال DataSets با دیتابیس استفاده میشود data adapter . وقتی سودمند است که از کنترل data bound در Windows Forms استفاده کند، همچنین می تواند از یک راه آسان برای مدیریت ارتباط بین نرم افزار ها و جداول دیتابیس underlying ، ها view، ها و Stored Procedure ها استفاده کند.
DataAdapter ، بسته به نوع منبع داده ها ی مشخص شده طراحی میشوند. در جدول زیر کلاسهای DataAdapter و منبع داده های آن نشان داده میشود
یک DataAdapter به طور عمده از دو روش زیر استفاده میکند:
()Fill : روش پر کردن داده ها در یک DataSet یا یک شی data table از پایگاه داده میباشد. بازیابی ردیف از منبع داده با استفاده از دستور select command property صورت میگیرد.
Update() : این متد تغییرات دیتابیس را چک میکند.و همچنین RowState هر رکورد را در DataSet ،آنالیز و عملیاتهای INSERT, UPDATE و DELETE را فرا خوانی میکند.
مثال
SqlDataAdapter da=new SqlDataAdapter("Select * from Employee", con); da.Fill(ds,"Emp"); bldr =new SqlCommandBuilder(da); dataGridView1.DataSource = ds.Tables["Emp"];
سوال 9: چگونگی استفاده از شیء DataSet در ADO.NET؟
در معماری غیر متصل استفاده میشود
کارایی پایینی را ارائه میدهد.
این شی خواندنی و نوشتنی است.
DataSet از جداول چندگانه در پایگاه داده های مختلف پشتیبانی میکند.
DataSet به کنترل های متعدد محدود میشود.
DataSet دارای دسترسی کمتر به داده ها ست.
DataSet توسط ابزار ویژوال استودیو پشتیبانی می شود
ما می توانیم روابط را در یک DataSet ایجاد کنیم.
DataSet از ادغام با XML پشتیبانی میکند.
DataSet با Data Adapter در ارتباط است.
DataSet میتواند داده ها را تغییر دهد.
یک DataSet مجموعه ای از به DataTable و DataRelation است . DataTable مجموعه ای از DataColumn، DataRows و Constraints هاست .
مثال:
DataTable dt = new DataTable(); DataColumn col =new DataColumn(); Dt.columns.Add(col2); DataRow row = dt.newRow();
سوال 10: فضای نام کلاس System.Data را شرح دهید ؟
پاسخ: بطور کلی سه فضای نام System.Data ، System.Data.Common و System.Data.SqlTypes. موجود است . برخی از فضای نام ارائه دهندگان ، خاص هستند ، مانند : System.Data.OleDb، Microsoft.Data.Odbc و System.Data.SqlClient.
فضای نام System.Data کلاس هایی است که شما می توانید برای تمام ارائه دهندگان داده(data providers) استفاده کنید. این فضای نامی همچنین رابط کلاس های پایه برای کلاس های ارائه دهنده داده است. شکل زیر سلسله مراتب کلاس فضای نام System.Data را نشان می دهد.
سوال 11: چه چیزی در DataTable است؟
پاسخ:
DataTable نشان دهنده یک جدول در یک پایگاه داده است.
DataTableردیف و ستون را نشان می دهد .
DataSet مجموعه ای از data table ها است.
در DataTable اطلاعات رکورد ذخیره میشود .
نمایش DataTable در کد .aspx.cs،
protected void BinddataTable() { SqlConnection con = new SqlConnection("your database connection string"); con.Open(); SqlCommand cmd = new SqlCommand("Write your query or procedure", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); grid.DataSource = dt; grid.DataBind(); }
پرسش 12: DataReader در ADO.Net چیست؟
پاسخ:
DataReader تنها دارای یک جدول در یک زمان است.
DataReader تنها حالت دسترسی read را دارد و نمی تواند داده ها را write کند.
DataReaderبه ذخیره سازی محلی برای ذخیره داده نیاز ندارد.
DataReaderدارای یک ردیف در یک زمان. است
DataReaderاز حافظه کمتری استفاده میکند .
DataReader رابطه ها را حفظ نمیکند.
نمایش های DataReader در کد .aspx.cs،
protected void BinddataTable() { SqlConnection con = new SqlConnection("your database connection string"); con.Open(); SqlCommand cmd = new SqlCommand("Write your query or procedure", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); grid.DataSource = dt; grid.DataBind(); }
پرسش 13: SqlCommandBuilder چیست؟
پاسخ : CommandBuilder برای به روز رسانی، حذف و درج دستورات بر روی یک جدول پایگاه داده تنها به یک data adapter کمک می کند. OleDbCommandBuilder، SqlCommandBuilder و OdbcCommandBuilder کلاسهای نشان دهنده شئ CommonBuilder در OLEDB، SQL، و ODBC data provider هستند.
ایجاد یک Command Builder Object
// Create a command builder object SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
سوال 14: شی Connection در ADO.NET چیست؟
پاسخ: شی Connection بین یک منبع داده و یک dataadapter (از طریق Command) قرار دارد. زمان ایجاد اتصال شما نیاز به تعریف ارائه داده ها و یک منبع داده ،دارید. با این دو، شما همچنین می توانید شناسه کاربری و گذرواژه را بسته به نوع منبع داده مشخص کنید. شکل 3-3 رابطه بین یک اتصال، یک منبع داده، و یک آداپتور داده نشان می دهد.
برای بازیابی، اضافه کردن، به روز رسانی و حذف داده ها به یک منبع داده مورد استفاده قرار میگیرد
. شکل 2 رابطه بین Command و اشیاء اتصال را نشان می دهد.
کلاس های Data provider connection
سوال 15: DataView و در را شرح دهید ADO.NET؟
پاسخ: DataView شما را قادر به ایجاد Viewهای مختلف از داده های ذخیره شده در یک DataTable میسازد ، یک قابلیت است که اغلب در داده های برنامه اتصال استفاده می شود.
DataView custDV = new DataView(customerDS.Tables["Customers"], "Country = 'USA'", "ContactName", DataViewRowState.CurrentRows); DataView custDV = customerDS.Tables["Customers"].DefaultView;
سوال 16: متد ExecuteScalar در ADO.NET چیست؟
پاسخ: متد ExecuteScalar در شی SqlCommand برای بازیابی یک مقدار واحد از پایگاه داده مفید است. در مثال ، ما نیاز به بازیابی تعداد کل رکوردها در جدول دیتابیس Pubs داریم . از آنجا که تعداد کل رکوردها یک مقدار اسکالر است، روش اسکالر استفاده میشود. در زیر، کد و توضیح آن قرار دارد:
private void frmSqlCommand_Load(object sender, EventArgs e) { //Sample 03: Open Database Connection String con_string = Properties.Settings.Default.ConStrPubs; pubs_db_connection = new SqlConnection(con_string); pubs_db_connection.Open(); //Sample 04: Form the Command Object SqlCommand cmd = new SqlCommand(); cmd.CommandText = "Select Count(*) as Count from Titles"; cmd.Connection = pubs_db_connection; //Sample 05: Execute the Command & retrive scalar value lblTotal.Text = System.Convert.ToString(cmd.ExecuteScalar()); }
سوال 17: متدهای DataSet در کجا استفاده میشود؟
پاسخ: در معماری غیر متصل استفاده می شود. این رکوردها ،در فرمت جدول و ستون در دیتابیس نمایش داده میشوند . و آن رکورد در یک یا چند جدول ذخیره میشود .
SqlDataAdapter da; DataSet ds; string strconn = "Data Source=YourServerName;Initial Catalog=EMP;Integrated Security=True"; private void Form1_Load(object sender, EventArgs e) { da = new SqlDataAdapter("select * from userdet", strconn); ds = new System.Data.DataSet(); da.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; }
متدهای DataSet
AcceptChanges() : در این متد تغییرات رکوردها در یک DataSet ذخیره می شوند.
Clear() : در این متد تمام ردیف ها از DataSet حذف میشوند
Clone() : این متد ساختار DataSet را کپی میکند
Copy() : این نسخه تمامی رکوردها و ساختار DataSet راکپی میکند
RejectChanges() : این متد از تغییرات DataSet ساخته شده ، صرفنظر میکند
HasChanges() : این متد مقدار Boolean را برمیگرداند تا نشان دهد که رکورد را DataSet تغییر داده است یا نه.
()GetChanges:این متد ، زمانی که تغییر کند ،کپی آن رکورد را نگهداری میکند.
سوال 18: پارامترهای ADO.NET چیست؟
پاسخ: پارامترهای پیوستگی SelectCommand برای کمک به انتخاب داده در DataSet است.
OleDbType نوع اطلاعات پارامتر را توصیف می کند. و از رشته های GUID تشکیل شده است. SQL data provider از نوع SqlDb است و ODBC data provider ، از نوع ODBC است . این نوع نام ها و تعاریف متفاوت، بسته به استفاده شما از provider دارد.
سوال 19: چه تفاوتی بین DataSet و DataReader است؟
پاسخ:
DataReader
DataReader ADO.NET برای بازیابی اطلاعات فقط خواندنی و forward-only از دیتابیس بکار میرود.
استفاده از DataReader عملکرد نرم افزار را افزایش می دهد و باعث کاهش سربار سیستم میشود .
یک DataReader با فراخوانی Command.ExecuteReader ایجاد کنید و پس از ایجاد یک نمونه از شی Command بسازید. این یک نمونه از معماری متصل میباشد: اطلاعات تا زمانی که ارتباط با پایگاه داده وجود دارد؛ در دسترس است .
شما نیاز به باز و بستن اتصال به صورت دستی در کد دارید
DataSet
DataSet یک نمایش در حافظه داده است.
می توان آن را با منابع اطلاعاتی متعدد استفاده کرد.
DataSet نشان دهنده مجموعه ای کامل از اطلاعات از جمله جداول مرتبط، محدودیت، و روابط بین جداول است.
data adapter به عنوان یک پل بین DataSet و منبع داده برای بازیابی و ذخیره داده ها ، عمل می کند.
dataadapter کمک می کند تا نگاشت داده در DataSet برای مطابقت با داده ها در منبع داده صورت بگیرد.
نیاز به باز و بسته کردن دستی ارتباط در کد ندارد.
یک معماری غیر متصل است.
سوال 20: متد ExecuteNonQuery برای چه کاری استفاده میشود؟
پاسخ 20: متد ExecuteNonQuery برای اجرای دستور و برگرداندن تعداد ردیف تحت تاثیر، استفاده می شود.
متد ExecuteNonQuery می تواند برای برگرداندن result set استفاده شود.
public void CallExecuteNonQuery() { SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString; try { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "DELETE FROM EMP WHERE DEPTNO = 40"; cmd.CommandType = CommandType.Text; conn.Open(); Int32 RowsAffected = cmd.ExecuteNonQuery(); MessageBox.Show(RowsAffected + " rows affected", "Message"); cmd.Dispose(); conn.Dispose(); } catch(Exception ex) { MessageBox.Show(ex.Message); } }
سوال 21: متد DataRelation برای چه کاری استفاده میشود ؟
پاسخ DataRelation : یک کلاس از معماری غیر متصل در فریم ورک دات نت ودر فضای نام System.Data است .این نشان دهنده یک رابطه بین جداول پایگاه داده و ارتباط جداول بر اساس تطبیق ستون ها است.
مثال:
DataRelation drel; drel = new DataRelation("All", ds.Tables[0].Columns[0], ds.Tables[1].Columns[0]);
سوال 22: چگونه می توان یک SqlConnection را ایجاد کرد؟
پاسخ: کلاس SqlConnection برای ایجاد ارتباط بین front end وback end استفاده می شود
Syntax:
SqlConnection obj=new SqlConnection(“Integrated Security=true;Initial Catalog=Table_Name;Data Source=.”);-- for Windows authentication SqlConnection obj=new SqlConnection(“user id= sa ; Password=sa123;server=.;database=name”); --Sql server Authentication
پرسش 23: کلاس های مهم ADO.NET چیست؟
پاسخ
ADO.NET مجموعه ای از کلاسهای است( framework) ، که با منابع داده مانند دیتابیس و فایل های XMLدر تعامل است. ADO مخفف کلمات ActiveX Data Objects است.و اجازه میدهد تا با داده ها یا دیتابیس ها اتصال برقرار کنیم. این کلاس ها و متدها ها برای بازیابی و دستکاری داده استفاده میشود.
در زیر تعدادی از برنامه های دات نت که با استفاده از ADO.NET به یک دیتابیس متصل ، و دستورات را اجرا و داده ها را از دیتابیس بازیابی میکنند، قرار دارد.
ASP.NET Web Applications
Console Applications
Windows Applications
کلاس مهم در ADO.NET
Connection Class
Command Class
DataReader Class
DataAdaptor Class
DataSet.Class
چگونه با استفاده از ADO.NETبه دیتابیس متصل شویم
در حال حاضر یاد بگیرید که چگونه برای اتصال به یک پایگاه داده از ADO.NET استفاده کنید. برای ایجاد یک اتصال، شما باید با connection strings آشنا باشید connection strings یک متغیر رشته ای است و به عنوان پارامتر درSqlConnection مورد نیاز است .
این شامل key و value pairs ، like provider ، server، database ، userid و Password مانند موارد زیر است:
Server = "نام سرور و یا IP آدرس سرور"
Database = "نام دیتابیس"
Userid ="نام کاربری که اجازه کار با پایگاه داده را دارد"
Password ="پسورد برای ورود به دیتابیس"
سوال 24: کلاس SqlTransaction در ADO.NET چه کار میکند؟
پاسخ: کلاس SqlTransaction یک کلاس مهم در دات نت فریم ورک است. این تضمین می کند که بدنه کد، یک دیتابیس را تحت تاثیر قرار دهد و یا همان قبلی (Rollback) را نگهداری کند.
پرسش 25: دو شی بنیادین در ADO.NET چیست؟
پاسخ: دو شی اساسی در ADO.NET وجود دارد:
Data reader
Data set
کلاس DataReader :
شی کلاس DataReader ،اجازه خواندن اطلاعات بازگردانده شده توسط یک دستور SELECT و orward-only و read-only را به cursor میدهد. شی فوق را نمی توان مستقیما معرفی کرد. در عوض شما باید متد ExecuteReader از شیء Command و close را درزمان استفاده از Data Reader ، فراخوانی کنید, در غیر این صورت ارتباط فعال باقی می ماند تا زمانی که به صراحت بسته شود.
DataReader با متد ExecuteReader ()
//Open connection Conn.Open(); sdr = sc.ExecuteReader(CommandBehavior.CloseConnection); //Get all records while(sdr.Read()) { textBox1.AppendText(sdr.GetValue(0) + "\t" + sdr.GetValue(1)); textBox1.AppendText("\n"); }
کلاس DataSet
DataSet یک تکنولوژی معماری غیر متصل است ،که شامل چند جدول و رابطه است. در مثال زیر ،چگونگی بازیابی اطلاعات از یک جدول SQL سرور و استفاده از آن برای پر کردن یک شی DataTable در DataSet را خواهید دید.
مثال
private void Form1_Load(object sender, EventArgs e) { //Connection String string conString = "Data Source=localhost;Database=AdventureWorksLT2008;Integrated Security=SSPI"; // Add Connection string to SqlConnection SqlConnection Conn = new SqlConnection(conString); string query = "select * from SalesLT.Customer"; //Command Class definition SqlCommand sc = new SqlCommand(query, Conn); // Data Adapter definition SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = sc; //data Set definition DataSet ds = new DataSet(); // filling the result set in data table sda.Fill(ds, "SalesLT.Customer"); //output in data grid dataGridView1.DataSource = ds.Tables["SalesLT.Customer"]; }
پرسش 26: dataadapter و خصوصیت آن چیست؟
کلاسهای DataAdapter
DataAdapter پلی بین شی DataTable غیر متصل و منبع داده های فیزیکی است. SqlDataAdapter قادر به اجرای SELECT، DELETE و UPDATE statement در یک منبع داده است و همچنین ورودی result set را در شی DataTable استخراج میکند. کلاس SqlDataAdapter از یک متد با نام Fill() برای کپی کردن result set به DataTable استفاده میکند.
این خواص معمولا توسط کلاس SqlDataAdapter که در زیر می باشد ، استفاده میشود:
سوال 27: کدام فضای نام برای دسترسی به داده استفاده می شود؟
پاسخ: ADO.NET مجموعه ای از کتابخانه مدیریت استفاده شده توسط برنامه های دات نت است که برای ارتباط با منبع داده از یک درایور و یا provider استفاده میکند.
ADO.NET کتابخانه هایی برای ارتباط به منبع داده تحت فضاهای نام زیر را فراهم می کند .
system.Data
system.Data.OleDb
system.Data.SqlClient
system.Data.OracleClient
system.Data.Odbc
System.Data: این فضای نامی برای برگزاری و مدیریت داده ها بر روی یک دستگاه کلاینت استفاده می شود.
System.Data.OleDb: با استفاده از “OleDb” Provider ،می توانید با هر منبع داده ای مانند فایل ها، دیتابیس ها و ... ارتباط برقرار کنید.
System.Data.SqlClient: با استفاده از ارائه دهندگان SqlClient، تنها می توانید با دیتابیس " Sql Server" ارتباط برقرار کنید.
System.Data.OracleClient: با استفاده از، OracleClient می توانید با یک پایگاه داده "اوراکل" ارتباط برقرار کنید.
System.Data.ODBC: این فضای نامی حاوی مجموعه ای از کلاس ها با نامهای زیر است
Connection
Command
DataReader
DataAdaptar
CommandBuilder
Parameter
سوال 28: متد Command و خواص آن را توضیح دهید؟
پاسخ:
command یکی از اجزای اصلی ADO .NET است
Command با استفاده از شی اتصال ،SQL queries را اجرایی میکند.
Querie می تواند در قالب متن درون خطی، Stored Procedures و یا دسترسی مستقیم به جدول باشد.
از ویژگی های مهم شی Command این است که می توان برای اجرای queries ها و Stored Procedure با پارامتر استفاده کرد .
SqlCommand خواص کلاس
سوال 29: متد ExecuteReaderرا توضیح دهید؟
شی DataReader یک cursor فقط خواندنی و forward-only است.
نیاز به یک ارتباط فعال با منبع داده دارد
شی DataReader را نمی توان مستقیما معرفی کرد. در عوض، ما باید برای به دست آوردن شیء DataReader معتبر، متد ()ExecuteReader در شی command را فراخوانی کنیم.
مثال:
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
پرسش 30: توضیح متد ExecuteScalar در ADO.NET؟
پاسخ:
متد ExecuteScalar در SqlCommandObject بعد از اجرای کوئری در منبع داده ،ستون اول از سطر اول را برمی گرداند.
اگر result set شامل بیش از یک ستون یا ردیف باشد ، تنها ستون اول از سطر اول را برمیگرداند. تمام مقادیر دیگر نادیده گرفته می شوند.
اگر در result set خالی باشد آن تهی خواهدشد.
مثال
Int32 TotalSalary = Convert.ToInt32(cmd.ExecuteScalar());
پرسش 31: ExecuteXmlReader را توضیح دهید؟
پاسخ: متد اجرایی reader ،زمانی که ما نیاز به result set در قالب یک سند XML داریم قابل تغییر است . متد ExecuteXmlReader یک نمونه از کلاس XmlReader را برمیگرداند.
مثال
XmlReader xmlreader = cmd.ExecuteXmlReader(); XmlDocument xdoc = new XmlDocument();
پرسش 32: چگونه متد کلاس oleDbDataAdapter ، یک dataset را با رکورد هایش پر میکند؟
پاسخ: متد populates یکdataset با رکوردهایش را پر میکند.
نمودار:
مثال
private void button1_Click(object sender, EventArgs e) { SqlConnection con; SqlDataAdapter adapter; DataSet ds = new DataSet(); try { //create connection object con = new SqlConnection("connetionString"); //create query string(SELECT QUERY) String query = "SELECT * FROM SOMETABLE WHERE..."; con.Open(); //Adapter bind to query and connection object adapter = new SqlDataAdapter(query, con); //fill the dataset adapter.Fill(ds); } catch(Exception ex) { con.Close(); } }
پرسش 33: خصوصیت های OleDbDataAdapter Command چیست؟
پاسخ:
سوال 34: متد ()clear از DataSet را توضیح دهید؟
جواب: این متد ها تمام ردیف های DataSet را حذف میکند.
یک دکمه با نام clear ایجاد کرده وکد زیر را در رویداد کلیک آن وارد کنید .
private void btnclear_Click(object sender, EventArgs e) { ds.Clear(); } Run the application.
خروجی:
با کلیک بروی کلید مورد نظر ، خروجی زیر نمایش داده میشود
پرسش 35: متد ()clone ازDataSet چیست؟
این متد ساختار DataSet را کپی میکند
یک دکمه با نام clone ایجاد کرده وکد زیر را در رویداد کلیک آن وارد کنید .
private void btnclone_Click(object sender, EventArgs e) { DataSet daset = ds.Clone(); dataGridView2.DataSource = daset.Tables[0]; }
خروجی
با کلیک بروی کلید مورد نظر ، خروجی زیر نمایش داده میشود
پرسش 36:متد ()copyاز DataSet چیست؟
پاسخ: تمام رکوردها با ساختار DataSet را کپی میکند
یک دکمه با نام copy ایجاد کرده وکد زیر را در رویداد کلیک آن وارد کنید .
private void btncopy_Click(object sender, EventArgs e) { DataSet daset = ds.Copy(); dataGridView2.DataSource = daset.Tables[0]; }
خروجی
با کلیک بروی کلید مورد نظر ، خروجی زیر نمایش داده میشود
پرسش 37: متد HasChanges() ازDataSet چیست؟
این متد مقدار Boolean را برمیگرداند تا نشان دهد که رکورد DataSet تغییر کرده است یا نه. اگر هر تغییر انجام شود ، trueبازمیگرداند و اگر هیچ تغییری انجام نشود false برمیگرداند.
یک دکمه با نام HasChanges ایجاد کرده وکد زیر را در رویداد کلیک آن وارد کنید .
private void btnHasChanges_Click(object sender, EventArgs e) { if(ds.HasChanges()) { MessageBox.Show("Changes Has Made"); } if(!ds.HasChanges()) { MessageBox.Show("No Change"); } }
خروجی
پرسش 38: خواص شی Connection و اجزای کلاس connection چیست؟
پاسخ: کلاس اتصال دارای یک connection string است که با دیتابیس ارتباط برقرار میکند. connection string بسته به نوع ارائه دهنده ها استفاده میشود.برای OleDbConnection، شما باید از خواص “OleDb” Provider و منبع داده استفاده کنید
connection می تواند states مختلف، از جمله open،closed، connect، و ... داشته باشد.
پرسش 39: متد preferred برای اجرای دستورات SQL از چه پارامترهایی استفاده میکند؟
پاسخ: متد preferred از اشیاء، SqlParameter و oleDbParameter استفاده میکند
کلاس SqlParameter در فضای نام "System.Data.SqlClient" یافت میشود . این کلاس از یک معماری متصل فریم ورک دات نت استفاده میکند و نشان دهنده پارامترها است.
پرسش 40 DataSetآیا : در ADO.NET جایگزین شی ADO Recordset است؟
پاسخ :DataSet درADO.NET از شی ADO Recordset بهتر است
DataSet می تواند چند جداول را در یک زمان نگه دارد.
DataSet دسترسی خواندنی و نوشتنی دارد .
DataSet در سیستم محلی ذخیره میشود
DataSet دارای ردیف های متعدد در یک زمان است.
DataSet از حافظه بیشتر استفاده میکند .
DataSet رابطه ها را حفظ میکند.
DataSet به داده های دیتابیس متصل میشود.
نمایش DataSet در کد .aspx.cs،
protected void BindDataSet() { SqlConnection con = new SqlConnection("your database connection string "); con.Open(); SqlCommand cmd = new SqlCommand("Write your query or procedure ", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); grid.DataSource = ds; grid.DataBind(); }
پرسش 41 : تراکنشها در ADO.NET چیست؟
پاسخ: تراکنش : ADO.NET یک کلاس transaction که نشان دهنده یک تراکنش است،را ارائه میدهد. همه data provider ها نسخه خود را از کلاس transaction میگیرند.
شکل زیر برخی از کلاس های پیاده سازی IDbTransaction را نشان می دهد
سوال 42 : ارائه دهنده داده ADO.NET چیست؟
پاسخ: در دات نت چهار ارائه دهنده داده در دسترس است.
SQL Server: به طور خاص با مایکروسافت SQL سرور کار میکند . و در فضای نام System.Data.SqlClient وجود دارند.
OLE DB: برای کار با OleDb provider استفاده میشود. System.Data.dll با OLEDB .NET framework data provider در فضای نام System.Data.OleDb پیاده سازی میشود.
ODBC: برای استفاده از این نوع ارائه دهنده ، شما باید از یک درایور ODBC استفاده کنید. System.Data.ODBC.dll با ODBC .NET framework data provider پیاده سازی میشود .این مجموعه در بخشی از ویژوال استودیو دات نت نصب و راه اندازی میشود.
Oracle : System.Data.OracleClient.dll با Oracle .NET framework data provider در فضای نام System.Data.OracleClient پیاده سازی میشود .
سوال 43: چگونه می توانیم در ADO.NET ارتباطات را ایجاد و مدیریت کنیم؟
پاسخ :
ایجاد یک شی Connection
کامپوننت اتصال dataprovider با یک پایگاه داده ارتباط برقرار میکند. برای اتصال به Microsoft SQL Server ، از کلاس SQL connection استفاده میشود . در زیر خواص و متدهای کلاس SqlConnection معرفی میشود.
ConnectionString : اطلاعاتی ، مانند نام پایگاه داده و اطلاعات کاربری برای دسترسی به دیتابیس و ... را فراهم میکند.
Open() :اتصال را برای دسترسی به دیتابیس باز میکند.
Close() :بستن اتصال دیتابیس.
مثال
// Creating object of SqlConnection Class. SqlConnection cn = new SqlConnection(); //Creating connection string to sample database. cn.ConnectionString = "Data source=.; Initial Catalog=Sample; User Id=sa; Password=faculty";
رشته اتصال، اطلاعات اتصال به پایگاه داده را تعیین میکند.
Data Source : نام ارائه دهنده و یا نام سرور خود را مشخص می کند.
Initial Catalog : نام دیتابیس را مشخص میکند.
User Id and Password: نام کاربری و رمز عبور ، سرور دیتابیس را مشخص میکند.
Open the Connection // Creating object of SqlConnection Class. SqlConnection cn = new SqlConnection(); //Creating connection string to sample database. cn.ConnectionString = "Data source=.; Initial Catalog=Sample; User Id=sa; Password=faculty"; cn.Open(); // it open the connection to database server..
بستن اتصال
// Creating object of SqlConnection Class. SqlConnection cn = new SqlConnection(); //Creating connection string to sample database. cn.ConnectionString = "Data source=.; Initial Catalog=Sample; User Id=sa; Password=faculty"; cn.Open(); // it open the connection to database server.. //Creating sqlcommand class object SqlCommand cmd = new SqlCommand("Select * from tblEmployees", cn); SqlDataReader dr = cmd.ExecuteReader();//Executing query cn.Close();//Closing the connection
پرسش 44: داده ی غیر متصل چیست؟
پاسخ: data representation ، مانند یک DataSet است که به اتصال مستمر با پایگاه داده نیاز نداردو با داده غیر متصل کار میکند.
داده DataSet در دیتابس غیر متصل است . برای واکشی نتایج یک کوئری در DataSet از یک شی data adapter استفاده میشود ، دیگر ارتباطی بین DataSet و دیتابیس وجود ندارد و تغییر داده های DataSet برروی داده های دیتابیس تاثیر نمی گذارد.
کار با ساختمان داده های غیر متصل قطعا از مزایای آن است. اولین مزیت عمده کار با داده ها ی غیر متصل این است که به ارتباط فعال در پایگاه داده نیاز ندارد.
پرسش 45: DataTable را توضیح دهید و ارتباط بین DataTable ، DataRow، و DataColumn را بیان کنید.
پاسخ: شی DataTable نشان دهنده یک جدول و مجموعه ای از ستون ها و ردیف در دیتابیس است. شی های DataRow نشان دهنده یک سطر جدول، و شی DataColumn نشان دهنده یک ستون از جدول است.
خواص ستون شی DataTable نشان دهنده ی DataColumnCollection است، که مجموعه ای از اشیاء DataColumn در یک DataTable است . با استفاده از شی های DataRow اطلاعات به یک جدول داده اضافه میشود. شی DataRowCollection نشان دهنده مجموعه ای از ردیفDataTable است ، که می تواند از خواص ردیف آن استفاده کند.
شکل زیر رابطه بین DataTable ، DataRow، و DataColumn را نشان می دهد.
پرسش 46: شی Data Access یا DAO چیست؟
پاسخ: شی دسترسی به داده ها(DAO) برنامه نویسان را به دسترسی به پایگاه داده های محلی در Microsoft Jet Database Engine format، که در درجه اول ایندکس میشدند، قادر میسازد. پس از DAO وRDO ، اشیاء ActiveX داده (ADO) آمدند. این دسترسی به فن آوری داده ها برای یک پارادایم کلاینت / سرور طراحی شده است. ADO.NET تکامل ADO است و اجزای آن برای عملکرد بهتر در معماری چند لایه طراحی شده اند.
پرسش 47: مزایای استفاده از ADO.NET چیست؟
پاسخ: مزایای استفاده از ADO.NET
چند مزیت ADO به شرح زیر است:
) Single Object-oriented API شی گرا)
ADO.NET یک مجموعه واحد شی گرا از کلاس فراهم می کند. ارائه دهندگان داده های مختلف ،برای کار با منابع داده مختلف از آن استفاده میکنند.
کد مدیریت
کلاس های ADO.NET از کلاس های مدیریت شده هستند .
Deployment
مایکروسافت از MDAC ، که به عنوان مولفه ActiveX در دات نت فریم ورک است ، استفاده می کند.
پشتیبانی از XML
داده ADO.NET درفرمت xml(زبان نشانه گذاری) منتقل میشوند. XML دسترسی سریع داده ها را برای دسکتاپ و برنامه های کاربردی توزیع شده ، فراهم میکند.
کارایی و مقیاس پذیری
هنگامی که در حال توسعه نرم افزار وسرویسهای مبتنی بر وب هستید ، کارایی و مقیاس پذیری دو عامل مهم هستند. داده های cache غیر متصل در XML ، به عملکرد و مقیاس پذیری کمک میکند .
پرسش 48: (متد GetChanges) ADO.NET برای چیست؟
پاسخ: متد GetChanges از DataSet برای بازیابی ردیف هایی که تغییر یافته اند ، استفاده میشود . متد GetChanges یک DataSet با ردیف اصلاح شده را برمی گرداند.
سوال 49: چگونه می توان به داده های DataReader دسترسی داشت؟
پاسخ: DataReader یک کلاس است که دارای داده هایی در سطر و ستون برای دسترسی به داده های DataReader است.
این متد های زیر را فراهم میکند:
GetName(int ColIndex)
نوع بازگشت این متد یک رشته است، نام ستون در موقعیت شاخص داده را برمی گرداند.
() Read
حرکت رکورد نشانگر از مکان فعلی به سطر بعدی و وضعیت بولی است که می گوید که آیا ردیفی که منتقل شده شامل داده است یا نه.
GetValue(int Colindex)
مقدار یک ستون از ردیف که اشاره گر با مشخص کردن موقعیت شاخص ستون را بر می گرداند.
() NextResult
دسترسی سریع به اطلاعات از یک منبع داده را فراهم می کند ، آن اتصال گرا است.
ویژگی های DataReader
دسترسی سریع به اطلاعات از یک منبع داده را فراهم می کند ، آن اتصال گرا است
با استفاده از ان میتوانید جداول چندگانه را در یک زمان نگهداری کنید.
مثلا :
Command cmd=new Command(“Select * From Student ; Select * From Mark ”, Con); Data Reader dr= cmd.ExecuteReader();
پرسش 50: کلاس BindingSource در ADO.NET چیست؟
پاسخ: کلاس BindingSource به سادگی برای اتصال داده ها و همچنین عملیات های مختلف بر روی رکورد استفاده میشود. از متدهای مختلف مانند ADDNEW ()، MoveFirst ()، MovePrevious ()، MoveNext ()، و ... برای اضافه کردن سطر جدید، حرکت به رکورد اول، حرکت به رکورد قبلی، حرکت به رکورد بعدی و بسیاری از عملیات دیگر بدون نوشتن کد برای آنها، استفاده میشود.
- C#.net
- 6k بازدید
- 9 تشکر