راه های مختلف دسترسی به دیتابیس در ADO.net
پنجشنبه 19 آذر 1394اساسا برای دسترسی به دیتابیس ، و دریافت و ارسال داده ها به آن از ()SQLDataAdapter.Fill و ()ExecuteNonQuery و ()ExecuteScalar استفاده می شود. تازه کارهای برنامه نویسی در استفاده مناسب ترین آنها برای شرایط مختلف گیج می شوند. در این مقاله قصد داریم توضیح دهیم که در هر موقعیت از کدام یک از این گزینه ها استفاده کنیم.
اساسا برای دسترسی به دیتابیس ، و دریافت و ارسال داده ها به آن از 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; }
- C#.net
- 3k بازدید
- 7 تشکر