پرسش و پاسخ های رایج درباره ی ADO.NET

یکشنبه 31 مرداد 1395

در این مقاله سوالات مختلف به همراه پاسخ درباره ADO.NET قرار دارد ،که کمک فراوانی برای یادگیری و استفاده از آنها در مصاحبه ها میکند.

پرسش و پاسخ های  رایج درباره ی  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 یک معماری غیر اتصال گرا  است ،به این معنی که به ارتباط  فعال در طول کار با 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 ()، و ...  برای اضافه کردن سطر جدید، حرکت به رکورد اول، حرکت به رکورد قبلی، حرکت به رکورد بعدی و بسیاری از عملیات دیگر بدون نوشتن کد برای آنها، استفاده میشود.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 5k بازدید
  • 9 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید