راه های مختلف دسترسی به دیتابیس در ADO.net

پنجشنبه 19 آذر 1394

اساسا برای دسترسی به دیتابیس ، و دریافت و ارسال داده ها به آن از ()SQLDataAdapter.Fill و ()ExecuteNonQuery و ()ExecuteScalar استفاده می شود. تازه کارهای برنامه نویسی در استفاده مناسب ترین آنها برای شرایط مختلف گیج می شوند. در این مقاله قصد داریم توضیح دهیم که در هر موقعیت از کدام یک از این گزینه ها استفاده کنیم.

راه های مختلف دسترسی به دیتابیس در  ADO.net

 اساسا برای دسترسی به دیتابیس ، و  دریافت و ارسال داده ها به آن از  SQLDataAdapter.Fill()  و  ExecuteNonQuery()  و ExecuteScalar()  استفاده می شود. تازه کارهای برنامه نویسی در استفاده مناسب ترین انها برای شرایط مختلف گیج می شوند. در این مقاله قصد داریم توضیح دهیم که در هر موقعیت از کدام یک از این گزینه ها استفاده کنیم . امروزه بیشتر برنامه ها به دیتابیس متصل هستند . و از طریق برنامه می توان داده ها را دریافت کرد یا تغییر داد. داده می تواند یک داده تنها ، یک مقدار یا لیستی از داده ها باشد. پس اساسا از کلاس  SqlCommand  برای ارسال query  به دیتابیس استفاده می شود.

سه متد در  ADO.net وجود دارد که برای دسترسی به دیتابیس استفاده می شوند:

SqlDataAdapter.fill()

ExecuteNonQuery()

ExecuteScalar()

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

برای  ارتباط با دیتابیس ، رشته اتصال را در  Web.config  قرار می دهیم.

    <connectionStrings>  
        <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=Test; User Id=sa; Password=123;" providerName="System.Data.SqlClient" />   
     </connectionStrings>  

SqlDataAdapter.Fill()

برای بازیابی داده ها از دیتابیس استفاده می شود. هر زمان که فکر کردید نیاز است که داده ای را از هر منبعی در  ADO.net دریافت و آنها را در DataTable یا  DataSet پر کنید ، آنگاه لازم است از  objSqlDataAdapter.Fill(objDataSet) استفاده کنید .

ابتدا به یک Stored Procedure  برای دریافت داده ها از دیتابیس نیاز داریم.

    CREATE PROCEDURE GetEmployeeList  
    AS  
    BEGIN  
    SELECT * FROM dbo.Employees  
    END  

کدهای زیر در این شیوه استفاده می شوند.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  
    using System.Configuration;  
    using System.Data.SqlClient;  
    using System.Data;  
    namespace EmployeeDemo  
    {  
        public partial class Emploee: System.Web.UI.Page  
        {  
            string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;  
            protected void Page_Load(object sender, EventArgs e)  
            {  
                if (!this.IsPostBack)  
                {  
                    GetEmployeesList();  
                }  
            }  
            public DataSet GetEmployeesList()  
            {  
                DataSet dsEmployee = new DataSet();  
                using(SqlConnection con = new SqlConnection(connectionString))  
                {  
                    SqlCommand objSqlCommand = new SqlCommand("GetEmployeeList", con);  
                    objSqlCommand.CommandType = CommandType.StoredProcedure;  
                    SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter(objSqlCommand);  
                    try  
                    {  
                        objSqlDataAdapter.Fill(dsEmployee);  
                        dsEmployee.Tables[0].TableName = "Employees";  
                        grvEmployee.DataSource = dsEmployee;  
                        grvEmployee.DataBind();  
                    }  
                    catch (Exception ex)  
                    {  
                        return dsEmployee;  
                    }  
                }  
                return dsEmployee;  
            }  
        }  
    }  

ExecuteNonQuery()

زمانی از این شیوه استفاده می شود که چندین ردیف مورد تاثیر قرار بگیرند . می توانید از  ExecuteNoneQuery() برای وارد کردن ، بروزرسانی و حذف داده ها استفاده می شود. شماره ردیفهایی که هنگام اجرای عملیات  DML یا  Data Manipulation Language در دیتابیس مورد تاثیر قرار گرفته اند را بر میگرداند. اگر ردیفی مورد تاثیر قرار نگرفته باشد 1- را برمیگرداند، در غیر اینصورت اگر مقداری بزرگتر از 0 برگرداند آن ردیف در دیتابیس مورد تاثیر قرار گرفته است.

    public int AddEmployee(string name, string emailId, string age, string address, int DepartmentId)  
    {  
        int i = 0;  
        using(SqlConnection con = new SqlConnection(connectionString))  
        {  
            con.Open();  
            SqlCommand objSqlCommand = new SqlCommand("Insert into Employees values ('" + name + "','" + emailId + "','" + age + "','" + address + "','" + DepartmentId + "')", con);  
            try  
            {  
                i = objSqlCommand.ExecuteNonQuery();  
            }  
            catch (Exception ex)  
            {  
                con.Close();  
            }  
        }  
        return i;  
    }  

ExecuteScalar()

 برای دریافت یک ردیف استفاده می شود . اگر داده ها بیشتر از یک ردیف باشد ،فقط مقدار ردیف اول را به ما می دهد. این روش از دیگر روشها سریعتر است. اگر نتیجه خالی باشد مقدار  null  را بر میگرداند و محدودیتی در آن وجود دارد که تنها 2033   کاراکتر را می تواند بازگرداند. باید از کد زیر استفاده کنیم :

    public string GetEmployeeName(int id)  
    {  
        string employeeName = string.Empty;  
        using(SqlConnection con = new SqlConnection(connectionString))  
        {  
            con.Open();  
            SqlCommand objSqlCommand = new SqlCommand("select name from employees where id='" + id + "'", con);  
            try  
            {  
                employeeName = Convert.ToString(objSqlCommand.ExecuteScalar());  
            }  
            catch (Exception ex)  
            {  
                con.Close();  
            }  
        }  
        return employeeName;  
    }  

آموزش سی شارپ

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

نویسنده 3207 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 7 تشکر

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

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