public interface IDbConnection : IDisposable
{
string ConnectionString { get; set; } int ConnectionTimeout { get; } string Database { get; } ConnectionState State { get; } IDbTransaction BeginTransaction();
IDbTransaction BeginTransaction(IsolationLevel il); void ChangeDatabase(string databaseName);
void Close();
IDbCommand CreateCommand(); void Open();
}
Phương thức Close() là tương đương về mặt chức năng với việc gọi phương thức Dispose() trực tiếp hoặc gián tiếp bên trong phạm vi using của C#.
IDbTransaction Interface: Việc nạp chồng phương thức BeginTransaction() (overloaded BeginTransaction() method) được định nghĩa bởi IDbConnection cung cấp truy xuất đến đối tượng Transaction của trình cung cấp. Việc sử dụng các thành phần được định nghĩa bởi IDbTransaction, có thể tương tác với một phiên chuyển giao (transactionnal session) và kho dữ liệu ở dưới.
public interface IDbTransaction : IDisposable
{
IDbConnection Connection { get; } IsolationLevel IsolationLevel { get; } void Commit();
void Rollback();
}
IDbCommand Interface: IDbCommand Interface được thi hành bởi đối tượng command của trình cung cấp dữ liệu. Đối tượng command cho phép thao tác với các câu lệnh SQL, Stored Procedures và các truy vấn có tham số (parameterized queries). Trong phần bổ sung, các đối tượng command truy xuất đến DataReader của trình cung cấp dữ liệu thông qua việc nạp chồng phương thức ExecuteReader() (overloaded ExecuteReader() method).
public interface IDbCommand : IDisposable
{
string CommandText { get; set; }
int CommandTimeout { get; set; } CommandType CommandType { get; set; } IDbConnection Connection { get; set; } IDataParameterCollection Parameters { get; } IDbTransaction Transaction { get; set; }
UpdateRowSource UpdatedRowSource { get; set; } void Cancel();
IDbDataParameter CreateParameter(); int ExecuteNonQuery();
IDataReader ExecuteReader();
IDataReader ExecuteReader(CommandBehavior behavior); object ExecuteScalar();
void Prepare();
}
Interface IDbDataParameter và IDataParameter: Interface này cung cấp truy xuất đến một tập hợp các loại lớp tùy ý (compliant) IDbDataParameter (ví dụ: các đối tượng tham số):
public interface IDbDataParameter : IDataParameter
{
byte Precision { get; set; } byte Scale { get; set; }
int Size { get; set; }
}
IDbDataParameter kế thừa (extend) interface IDataParameter để có được các hành xử (behaveors) bổ sung sau đây:
public interface IDataParameter
{
DbType DbType { get; set; } ParameterDirection Direction { get; set; } bool IsNullable { get; }
string ParameterName { get; set; } string SourceColumn { get; set; }
DataRowVersion SourceVersion { get; set; } object Value { get; set; }
}
Chức năng của các Interface IDbDataParameter và IDataParameter cho phép trình bày các tham số bên trong một lệnh SQL (bao gồm Stored Procedures) qua các đối tượng parameter của ADO.NET cụ thể hơn là những kí tự chuỗi hard-coded.
IDbDataAdapter and IDataAdapter Interfaces: IDbDataAdapter Interface định nghĩa một tập hợp các thuộc tính mà được dùng để duy trì các câu lệnh SQL cho các hoạt động có liên quan đến select, insert, update và delete.
public interface IDbDataAdapter : IDataAdapter
{
IDbCommand DeleteCommand { get; set; } IDbCommand InsertCommand { get; set; } IDbCommand SelectCommand { get; set; } IDbCommand UpdateCommand { get; set; }
}
Có bốn thuộc tính được thêm vào DataAdapter cũng được định nghĩa trong Interface cơ sở, IDataAdapter. Interface này định nghĩa chức năng chính của một loại DataAdapter: khả năng chuyển các DataSet giữa đối tượng gọi và kho dữ liệu bên dưới sử dụng các phương thức Fill() và Update(). IDataAdapter Interface cho phép ánh xạ các tên cột trong bảng dữ liệu thành các tên hiển thị thân thiện với người dùng hơn thông qua thuộc tính TableMappings.
public interface IDataAdapter
{
MissingMappingAction MissingMappingAction { get; set; } MissingSchemaAction MissingSchemaAction { get; set; } ITableMappingCollection TableMappings { get; }
int Fill(System.Data.DataSet dataSet);
DataTable[] FillSchema(DataSet dataSet, SchemaType schemaType); IDataParameter[] GetFillParameters();
int Update(DataSet dataSet);
}
IDataReader and IdataRecord: Interface IDataReader trình bày các hành sử (behaviors) phổ biến được hỗ trợ bởi một đối tượng DataReader cho trước.
public interface IDataReader : IDisposable, IDataRecord
{
int Depth { get; } bool IsClosed { get; }
int RecordsAffected { get; }
void Close();
DataTable GetSchemaTable(); bool NextResult();
bool Read();
}
IDataReader kế thừa IDataRecord, định nghĩa một số thành phần cho phép trích một giá trị được phân loại một cách rò ràng. Dưới đây là danh sách không đầy đủ của các phương thức GetXXX() khác nhau được định nghĩa bởi IDataRecord.
public interface IDataRecord
{
int FieldCount { get; }
object this[ string name ] { get; } object this[ int i ] { get; }
bool GetBoolean(int i); byte GetByte(int i); char GetChar(int i);
DateTime GetDateTime(int i); Decimal GetDecimal(int i); float GetFloat(int i);
short GetInt16(int i); int GetInt32(int i); long GetInt64(int i);
...
bool IsDBNull(int i);
}
Phương thức IDataReader.IsDBNull() thiết lập giá trị cho một trường là null.
4.5. Các lớp thao tác với cơ sở dữ liệu
4.5.1. Lớp Connection
Để kết nối với cơ sở dữ liệu và đọc các mẫu tin sử dụng đối tượng DataReader, thực hiện các bước sau:
- Chỉ định, cấu hình và mở đối tượng kết nối.
- Chỉ định và cấu hình đối tượng Command, chỉ rò đối tượng Connection như một Constructor có đối số hoặc qua thuộc tính Connection.
- Gọi ExecuteReader() trên đối tượng Command đã được cấu hình.
- Xử lý mỗi mẫu tin sử dụng phương thức Read() của DataReader.
Hình 4.5. Kết nối đến cơ sở dữ liệu và đọc dữ liệu
Connection là đối tượng có nhiệm vụ thực hiện kết nối đến cơ sở dữ liệu để các đối tượng như Command thao tác với cơ sở dữ liệu thông qua Connection này.
Các dạng khai báo chuỗi kết nối tuỳ theo loại Database Provider.
[OleDB Provider]
OleDbConnection myConnection = new OleDbConnection();
// Windows Authentication
myConnection.ConnectionString = "Provider=SQLOLEDB.1; Data Source = localhost; "
+"Initial Catalog=Pubs;Integrated Security=SSPI";
// SQL Authentication
myConnection.ConnectionString = "Provider=SQLOLEDB.1; Data Source = localhost;"
+ "Initial Catalog=Pubs;User ID=sa;Password=123456";
[SQLServer Provider]
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "Data Source=localhost;" + "Initial Catalog = Pubs;Integrated Security=SSPI";
[AttachDBFile] (tập tin cơ sở dữ liệu)
myConnection.ConnectionString = @"Data Source=localhostSQLEXPRESS;" +
@"AttachDBFilename=|DataDirectory|Pubs.mdf;Integrated Security=True";
Khi làm việc với một trình cung cấp dữ liệu là thiết lập một session với nguồn dữ liệu sử dụng đối tượng connection (kế thừa từ DbConnection). Các đối tượng Connection của .NET được cung cấp với một chuỗi kết nối được định dạng, gồm một số cặp name/value được phân cách bởi dấu chấm phẩy (;). Thông tin này được dùng để chỉ định tên máy sẽ kết nối, các thiết lập bảo mật được yêu cầu, tên của cơ sở dữ liệu trên máy đó và thông tin trình cung cấp dữ liệu cụ thể khác.
Tên Initial Catalog xác định tên cơ sở dữ liệu. Data Source xác định tên máy chứa cơ sở dữ liệu. Ở đây, (local) cho phép định nghĩa một Token riêng biệt (single) để chỉ rò máy cục bộ hiện hành, khi token SQLEXPRESS cho trình cung cấp dữ liệu SQL biết đang kết nối đến bản cài đặt SQL Server Express edition (nếu đã có Pubs trên SQL Server 2005/2008 hoặc các phiên bản trước đây chỉ rò Data Source=(local)SQLEXPRESS).
Integrated Security thiết lập thông tin bảo mật, nếu chọn Integrated Security là SSPI (tương đương true), để sử dụng tài khoản Windows hiện hành để xác nhận quyền người dùng.
User ID và Password thiết lập thông tin bảo mật, nếu chọn để sử dụng tài khoản SQL Server hiện hành để xác nhận quyền người dùng.
Sau khi chuỗi kết nối được thiết lập, gọi Open() mở kết nối với cơ sở dữ liệu. Ngoài việc bổ sung các thành phần ConnectionString, Open() và Close() một đối tượng kết nối cung cấp một số thành phần mà cho phép thêm vào các thiết lập thuộc về cấu hình kết nối như là các thiết lập Timeout thông tin thuộc về giao tác (transactional).
Các thành phần của DbConnection.
Ý nghĩa | |
BeginTransaction() | Phương thức này được sử dụng để bắt đầu một database Transaction. |
ChangeDatabase() | Phương thức này thay đổi cơ sở dữ liệu trên một kết nối mở (open connection) |
Close() | Phương thức này dùng để đóng kết nối |
ConnectionString | Thuộc tính này chứa các thông tin để kết nối. |
ConnectionTimeout | Thuộc tính này trả ra một khoảng thời gian chờ trong khi thiết lập một kết nối trước khi kết thúc và tạo ra một lỗi (mặc định là 15 giây). |
Database | Thuộc tính này lấy ra tên của cơ sở dữ liệu được duy trì bởi đối tượng connection. |
DataSource | Thuộc tính này lấy vị trí của cơ sở dữ liệu được duy trì bởi đối tượng connection. |
GetSchema() | Phương thức này trả ra một DataSet mà chứa thông tin bảng từ nguồn dữ liệu. |
Open() | Phương thức này dùng để mở kết nối |
State | Thuộc tính này thiết lập trạng thái hiện hành của việc kết nối, được thể hiện bởi việc liệt kê ConnectionState. |
Có thể bạn quan tâm!
- Tạo Trang Web.sitemap Với Mục Chọn Sitemap
- Lập trình trên nền Web - 24
- Vị Trí Của Ado.net Trong Kiến Trúc Của .net Framework
- Lập trình trên nền Web - 27
- Lập trình trên nền Web - 28
- Lập trình trên nền Web - 29
Xem toàn bộ 285 trang tài liệu này.
Ví dụ: Thực hiện việc tạo kết nối đến cơ sở dữ liệu Pubs trong MS SQL Server sử dụng đối tượng SqlConnection với chuỗi kết nối có dạng sau:
Xác thực với Windows Authenticate
string connectionString = "Data Source=localhostSQLEXPRESS;Initial Catalog=Pubs; Integrated Security=SSPI";
Xác thực với SQL Authenticate
string connectionString = "Data Source=localhostSQLEXPRESS;Initial Catalog=Pubs; User ID=sa;Password=123456";
string connectionString = “Server=localhost; Database= Pubs; Uid=sa; Pwd=123456”;
Tạo đối tượng Connection
SqlConnection myConnection = new SqlConnection(connectionString);
Mở kết nối đến cơ sở dữ liệu
myConnection.Open();
Đóng kết nối đến cơ sở dữ liệu
myConnection.Close();
Nội dung thiết kế trang ConnectionTester.aspx
<form id="form1" runat="Server">
<div>
<asp:RadioButton id="optSQL" runat="Server" Text="Use SQL Authentication (with sa account)" GroupName="Authentication" Font-Size="Smaller" Font- Names="Verdana"></asp:RadioButton> <br />
<asp:RadioButton id="optWindows" runat="Server" Text="Use Windows Integrated Authentication" GroupName="Authentication" Font-Size="Smaller" Font-Names="Verdana" Checked="True"> </asp:RadioButton> <br /> <br />
<asp:button id="cmdConnect" runat="Server" Text="Connect" onclick="cmdConnect_Click"></asp:button><br /> <br />
<asp:label id="lblInfo" runat="Server" Height="128px" Width="464px" Font- Size="Small" Font-Names="Verdana" ForeColor="Maroon"></asp:label>
</div>
</form>
Nội dung trang ConnectionTester.aspx.cs
public partial class ConnectionTester : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void cmdConnect_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=localhostSQLEXPRESS; Initial Catalog=Pubs;";
if (optWindows.Checked)
{
}
else
{
}
connectionString += "Integrated Security=SSPI";
connectionString += "User ID=sa;Password=123456";
SqlConnection myConnection = new SqlConnection(connectionString); try
{
myConnection.Open();
lblInfo.Text = "<b>Server Version:</b> " + myConnection.ServerVersion; lblInfo.Text += "<br /><b>Connection Is:</b> " + myConnection.State.ToString(); }
catch (Exception err)
{
}
finally
{
}
lblInfo.Text = "Error reading the database. "; lblInfo.Text += err.Message;
myConnection.Close();
lblInfo.Text += "<br /><b>Now Connection Is:</b> "; lblInfo.Text += myConnection.State.ToString();
Hình 4.6 Kết quả thực thi trường hợp kết nối cơ sở dữ liệu bị lỗi và thành công
Một cách khác, thực hiện việc khai báo cấu hình ConnectionString trong Web.config : không cần phải hard-code ở các trang mã lệnh.