Không an toàn, đúc không bao giờ an toàn và có thể thổi bất cứ lúc nào trong khi ứng dụng của bạn đang chạy. Trong khi SqlConnection
có nguồn gốc thực sự từ DbConnection
bạn không được đảm bảo rằng database.CreateConnection()
sẽ trả lại một SqlConnection
vì điều này có thể được tham số trong tệp cấu hình. Ngoài ra, tại sao bạn cần truyền tới SqlConnection
? Nó luôn luôn là tốt hơn để làm việc với các lớp học có cao hơn trong hệ thống phân cấp để tránh khớp nối mã của bạn với một thực hiện cụ thể mà sẽ làm cho mã của bạn không thể kiểm tra trong sự cô lập.
Trong khi EnterpriseLibrary thực hiện một công việc khá tốt trong việc giữ mọi thứ trừu tượng, bạn đang giết tất cả mọi thứ với dàn diễn viên này. Ngoài ra, bạn nên đảm bảo rằng tài nguyên dùng một lần luôn được xử lý đúng cách. Thay vào đó, thay vào đó:
Database database = DatabaseFactory.CreateDatabase("connection string");
using (var conn = database.CreateConnection())
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// TODO: work with the results here
}
}
}
Cách này mã của bạn ít mong manh hơn khi thay đổi cơ sở dữ liệu trong tệp cấu hình. Tất nhiên, bạn vẫn có mã SQL cứng này và có các ORM sẽ xử lý tình huống này. Chúng cũng sẽ cho phép bạn tập trung vào miền thực của ứng dụng thay vì lãng phí thời gian trong việc viết các truy vấn SQL và truyền từ một nhà cung cấp cơ sở dữ liệu sang một nhà cung cấp cơ sở dữ liệu khác. Nhưng đối với một ứng dụng đơn giản, điều này là OK.
Nguồn
2010-09-05 19:45:43
Có một phương pháp được sử dụng trong mã này cần SqlConnection như một tham số – Darqer