Tạo một kết nối tới database [C#]

Go down

Tạo một kết nối tới database [C#]

Bài gửi by nguyenduc on 18/1/2010, 10:27

Dưới đây là tổng quan về cách kết nối tới
cơ sở dữ liệu MS SQL Server 2005.
Như ở kì trước các bạn đã biết về các lớp cung cấp kết nối tới dữ liệu
(Data Connection Provider Classes), tất cả đều sử dụng
System.Data.IdbConnection interface cho ứng dụng. Dưới đây là bảng tổng
hợp lại các ‘data provider’ được cung cấp bởi Microsoft :
Hình này đã được
điều chỉnh kích thước. Nhấp vào đây để xem hình đầy đủ. Hình gốc có
kích thước là 908x400.


Bây giờ hãy thử ứng dụng vào tạo một kết nối tới Microsoft SQL Server
2005 (bạn phải setup cái này vào mấy trước đó) dùng lớp ‘SqlConnection’.
Dưới đây là một ví dụ kết nối tới database qua máy chủ SQL Server 2005.


HTML Code:

using System;
using System.Data;
using System.Data.SqlClient;

public class KetNoiSQLServer
{
public static void Main()
{
// Tạo connection string để kết nối
string connectionString = @"Server = .\SQLEXPRESS;" +
"Integrated Security = true";
// Tạo một connection tới máy chủ
SqlConnection conn = new SqlConnection(connectionString);

// QUA TRINH KET NOI
try
{
// Mở kết nối
conn.Open();
Console.WriteLine("Connection opened !");
}
catch (SqlException sqle)
{
// Thông báo biến cố khi kết nối
Console.WriteLine("Error: " + sqle.Message);
}
finally
{
// Đóng kết nối
conn.Close();
Console.WriteLine("Connection closed !");
}
}
}


Phân tích đoạn code trên một chút :
_Phần đầu code ta khai báo tên miền và các lớp cần sử dụng để kết nối, ở
đây ta dùng lớp ‘SqlConnection’ để kết nối cho nên dùng tên miền
‘System.Data.SqlConnection’.
_Sau đó tạo một chuỗi chứa thông tin tham số truyền khi kết nối, nôm na
thì hiểu là thông tin kết nối tới máy chủ. Giải thích ngắn gọn về chuỗi
kết nối này


HTML Code:

// Tạo connection string để kết nối
string connectionString = @"Server = .\SQLEXPRESS;" +
"Integrated Security = true";


Với : Server = .\SQLEXPRESS; là tên
server mà ta cần kết nối tới, ở đây mặc định sau khi cài Microsoft SQL
Server 2005 Express thì default thường là SQLEXPRESS. Còn kí hiệu ở
trước “ .\ “ thực chất là gọi tên máy chứa cơ sở dữ liệu cần kết nối.
Thông thường nếu bạn làm việc offline thì mặc định là ‘localhost’. Hai
kí hiệu : “ .\ “ và “(local)\” là tương đương nhau. Vì thế ở đoạn code
trên bạn có thể viết lại khai báo server là : @“Server =
(local)\SQLEXPRESS”
Với : Integrated Security = true đây là chỉ định cách kết nối tới cơ sở
dữ liệu, ở đây trên máy của tớ thì để Windows Authentication cho nên
tham số ‘Integrated Security’ mang giá trị ‘True’ như trên khi kết nối,
nếu bạn không dùng Windows Authentication thì bạn phải cung cấp Username
| Password đăng nhập vào hệ cơ sở dữ liệu.
Còn nhiều tham số trong chuỗi kết nối ( connection string ) khác nhưng
sẽ đề cập sau chi tiết hơn về thông tin kết nối.
_Sau đó tạo một đối tượng chứa thông tin kết nối ( thông tin này nằm
trong chuỗi kết nối connection string ) :
Code:
// Tạo một connection tới máy chủ
SqlConnection conn = new SqlConnection(connectionString);
_Vậy là bạn đã có một đối tượng chứa thông tin kết nối đầy đủ. Việc tiếp
theo là ‘THỬ” kết nối tới cơ sở dữ liệu xem thế nào.
_Yêu cầu đối tượng mở kết nối tớ cơ sở dữ liệu.

HTML Code:

try
{
// Mở kết nối
conn.Open();
Console.WriteLine("Connection opened !");
}


_Nếu như trong trường hợp kết nối mà
có lỗi thì kết nối tự động ngắt đi và dừng chương trình. Nếu như ta
không dùng cặp quan hệ ‘ try…catch…finally ‘ để kiểm tra kết nối thì nếu
gặp lỗi thì sẽ có thông báo lỗi và ta không biết được lỗi gì khi kết
nối vì vậy ở đây lỗi bắt được bị ném vào trong ‘catch’ và in ra lỗi bắt
được ( lỗi bắt được luôn được ghi ở chế độ Debug nếu như bạn RUN chương
trình ở Debug mode chứ không phải là Release mode ).


HTML Code:

catch (SqlException sqle)
{
// Thông báo biến cố khi kết nối
Console.WriteLine("Error: " + sqle.Message);
}


Lớp ‘SqlException’ là lớp chứa thông
tin về các lỗi bắt trong quá trình kết nối tới hệ cơ sở dữ liệu SQL
Server. Bạn có thể xem thông tin chi tiết hơn về các Exception của SQL
trong trang chủ MSDN.
_Cuối cùng khi kết nối thành công và không gặp trở ngại gì thì ta tiến
hành công việc trong thẻ finally. Ở đây là đóng kết nối.
Code:

HTML Code:

finally
{
// Đóng kết nối
conn.Close();
Console.WriteLine("Connection closed !");
}


_Chương trình tưởng chừng đơn giản đọc
rất dễ hiểu nhưng nếu bạn có kiến thức sâu hơn về kết nỗi và tương quan
server/client sẽ thấy một số vấn đề ở đây. Tớ đưa ra một số vấn đề mà
tớ đã gặp :
+ Giả sử kết nối bị lỗi không thực hiện được thì kết quả ra màn hình chỉ
có thông báo lỗi thôi đùng không ? . Trả lới : Sai ! Có cả thông báo
đóng kết nối nữa. Lý do : vì thẻ ‘finally’ dùng để đưa ra thao tác cuối
cùng của công việc cho nên sau khi thông báo lỗi xong nó sẽ nhảy tiếp
tục thẻ ‘finally’.
+ Nếu mà kết nối thế này có bị hao tổn tài nguyên máy không? Trả lời :
Có ! Tốn cả 2 bên server và client. Nếu mà càng nhiều kết nối thực hiện
thì hao tổn càng nhiều và làm chậm server rất nhiều và nhiều lúc quá
giới hạn cho phép sẽ không thể thực hiện được kết nối nữa. Vì vậy sau
khi mở kết nối thành công và hoàn thành quá trình xử lý thông tin thì
phải đóng kết nối ngay.
+ Làm cách nào đảm bảo đóng/mở kết nối đúng quy cách tránh ảnh hưởng
nhiều 2 bên server và client ? Trả lời : Bạn có thể đóng và mở kết nối
ngay trong khi ‘ try ‘ và cuối cùng đóng thêm một kết nối tại thẻ
‘finally’. Bạn có thể tham khảo code mẫu dưới đây :
Code minh họa đóng/ mở kết nối an toàn :


HTML Code:

// QUA TRINH KET NOI
try
{
// Mở kết nối
conn.Open();
Console.WriteLine("Connection opened !");
//
// Xử lý công việc online
//

// Đóng kết nối
conn.Close();

//
// Xử lý công việc offline
//

// Mở kết nối lần nứa
conn.Open();
//
// Xử lý công việc online
//

// Đóng lại kết nối
conn.Close();
}
catch (SqlException sqle)
{
// Thông báo biến cố khi kết nối
Console.WriteLine("Error: " + sqle.Message);
}
finally
{
// Đóng kết nối
conn.Close();
Console.WriteLine("Connection closed !");
}


Nếu như khi kết nối mà SQL Server
không xài chế độ Windows Authentication mà có username | password riêng
để truy cập (access) cơ sở dữ liệu (database) thì trong chuỗi kết nối (
connection string ) bạn phải cung cấp username | password cho thông tin
kết nối. Dưới đây là một ví dụ dùng username | password để kết nối :
Code:

HTML Code:

string connectionString = @"Server = .\SQLEXPRESS; " +
"User ID = sa; " +
"Password = pete_87";


Ở đây : ‘sa’ là tên mặc định cho
system administrator và ‘password’ là tớ đặt. Thông số này tùy thuộc vào
thông số máy chủ được cài đặt. Bạn có thể có system admin và không xài
password. Lúc này password sẽ được mặc định (default) là chuỗi rỗng
(empty string) cho nên trong chuỗi kết nối bạn có thể để tham số là :
Password =;
Nhưng đây không phải một code tốt ^&^.
Dưới đây là bảng các tham số truyền trong chuỗi kết nối, cung cấp thông
tin khi kết nối tới máy chủ.


Ví dụ một vài tham số kết nối :
Data Source = .\SQLEXPRESS
Server = .\SQLEXPRESS
Address = .\SQLEXPRESS
Addr = .\SQLEXPRESS
Network Address = .\SQLEXPRESS
Chú ý là : như đã nói ở trên : .\SQLEXPRESS tương đương với
(local)\EXPRESS
Thử áp dụng vào viết một ứng dụng Console báo cáo thông tin về kết nối.
Kết nối tới SQL Server dùng SqlConnection
Dùng code mẫu sau :
Code:

HTML Code:

using System;
using System.Data;
using System.Data.SqlClient;


public class ThongTinKetNoi
{
static void Main()
{
// Connection string
string connString = @"Server = .\SQLEXPRESS; " +
"Integrated Security = SSPI";

// Create connection
SqlConnection conn = new SqlConnection(connString);
try
{
// Open connection
conn.Open();
Console.WriteLine("Connection opened.");
// Display connection properties
Console.WriteLine("Connection Properties:");
Console.WriteLine("\tConnection String: {0}",conn.ConnectionString);
Console.WriteLine("\tDatabase: {0}",conn.Database);
Console.WriteLine("\tDataSource: {0}",conn.DataSource);
Console.WriteLine("\tServerVersion: {0}",conn.ServerVersion);
Console.WriteLine("\tState: {0}",conn.State);
Console.WriteLine("\tWorkstationId: {0}",conn.WorkstationId);
}
catch (SqlException e)
{
// Display error
Console.WriteLine("Error: " + e);
}
finally
{
// Close connection
conn.Close();
Console.WriteLine("Connection closed.");
}
}
}


Đọc qua code bạn có thể hiểu code dùng
như thế nào. Ở đây mình ghi chú thêm một vài điều
_Nếu khi kết nối bạn không chỉ rõ là kết nối tới database nào thì mặc
định database sẽ là : master
_Nếu muốn thay đổi database kết nối thì bạn thêm tham số ‘Database =
db_name;’ vào trong chuỗi kết nối.
_Nếu bạn đưa vào một database_name không tồn tại trong server thì sẽ gặp
thông báo lỗi :
“System.Data.SqlClient.SqlException : Cannot open database ‘db_name’
requested by the login. The login failed.”
_Workstation chỉ định tên của máy mà làm việc với máy chủ database cho
nên mỗi máy kết nối tới sẽ thu kết quả là tên của máy. Nếu mà bạn muốn
tất cả các máy kết nối tới máy chủ SQL có một Workstation ID giống nhau
thì trong chuỗi kết nối (connection string) bạn thêm tham số cho
Workstation ID. Ví dụ :
Workstation ID = Vo Danh Tieu Tot;
Kết nối tới SQL Server dùng OleDbConnection
Bạn nên đọc bài : ADO.NET cơ bản do tớ viết trước rồi tham khảo ở đây
cũng được.
Như đã viết ở đầu bài, khi kết nối ta có thể luân chuyển giữa các nhà
cung cấp kết nối để kết nối tới cơ sở dữ liệu. Ví dụ ở trên là kết nối
tới SQL Server dùng lớp ‘SqlConnection’.
Phần này tương tự sẽ dùng lớp OleDbConnection để kết nối tới SQL Server.


HTML Code:

using System;
using System.Data;
using System.Data.OleDb;


public class KetNoiDungOleDbConnection
{
static void Main()
{
// Connection string
string connString = @"Provider = SqlOleDb;
Data Source = .\SQLEXPRESS;
Integrated Security = SSPI";

// Create connection
OleDbConnection conn = new OleDbConnection(connString);
try
{
// Open connection
conn.Open();
Console.WriteLine("Connection opened.");
// Display connection properties
Console.WriteLine("Connection Properties:");
Console.WriteLine("\tConnection String: {0}",conn.ConnectionString);
Console.WriteLine("\tDatabase: {0}",conn.Database);
Console.WriteLine("\tDataSource: {0}",conn.DataSource);
Console.WriteLine("\tServerVersion: {0}",conn.ServerVersion);
Console.WriteLine("\tState: {0}",conn.State);
}
catch (OleDbException e)
{
// Display error
Console.WriteLine("Error: " + e);
}
finally
{
// Close connection
conn.Close();
Console.WriteLine("Connection closed.");
}
}
}


Kết nối tới cơ sở dữ liệu không khó và
phức tạp nhưng đòi hỏi kĩ năng và biết cách vận dụng khi kết nối một
cách hợp lý, tránh hao tổn tài nguyên máy.
Kết thúc bài về ‘tạo kết nối tới cơ sở dữ liệu

congdongcviet
http://it-uce.com/diendan/showthread.php?t=1452


nguyenduc
Cống hiến
Cống hiến

Tổng số bài gửi : 312
Join date : 17/09/2009
Age : 38
Đến từ : Bến tre - Hồ chí minh

Về Đầu Trang Go down

Re: Tạo một kết nối tới database [C#]

Bài gửi by Virus on 18/1/2010, 12:21

Hic, hiểu chi chik liền...
avatar
Virus
Góp sức
Góp sức

Tổng số bài gửi : 94
Join date : 29/09/2009
Age : 33

Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết