Như bạn có thể cảm nhận được từ tất cả các câu trả lời được đưa ra, những gì bạn đang tìm kiếm không tồn tại. Lý do cho điều này là bạn nên nhớ các chương trình về cơ bản là các tiến trình xử lý dữ liệu, vì vậy bạn không thể thay đổi dữ liệu của mình mà không thay đổi một thứ gì đó khác trong chương trình. Điều gì sẽ xảy ra nếu nó không phải là tên của cột nhưng loại đó đang thay đổi? Hoặc điều gì sẽ xảy ra nếu cột bị xóa?
Tóm lại, không có giải pháp tốt cho các vấn đề như vậy. Dữ liệu là một phần không thể tách rời của ứng dụng - nếu nó thay đổi, mong đợi ít nhất một số công việc. Tuy nhiên, nếu bạn mong đợi tên thay đổi (ví dụ, cơ sở dữ liệu không phải là của bạn và bạn đã được chủ sở hữu thông báo rằng tên của nó có thể thay đổi trong tương lai) và bạn không muốn triển khai lại ứng dụng vì đó, lựa chọn thay thế để biên dịch lại mã nguồn của bạn đó, như đã nêu trong câu trả lời khác, bao gồm:
- Sử dụng Stored Procedure
- bạn có thể sử dụng thủ tục lưu trữ để cung cấp dữ liệu cho ứng dụng. Trong trường hợp thay đổi được đề xuất (đổi tên một cột), DBA hoặc tuy nhiên phụ trách lược đồ cơ sở dữ liệu cũng nên thay đổi thủ tục được lưu trữ.
- Ưu điểm: Không cần biên dịch lại do sự thay đổi nhỏ trong cơ sở dữ liệu
- Nhược điểm: Nhiều hiện vật mà trở nên nay là một phần của thiết kế ứng dụng, ứng dụng sự hiểu biết là bị mờ.
- Sử dụng một Mapping file
- Bạn có thể tạo một tập tin bản đồ cung cấp cho bạn tên mà ứng dụng của bạn hy vọng một cột nhất định để có và tên thực tế cột có. Như vậy là rất rẻ tiền và dễ dàng.
- Ưu điểm: Không cần biên dịch lại do sự thay đổi nhỏ trong cơ sở dữ liệu
- Nhược điểm: thực thể thêm (lớp) trong thiết kế của bạn, ứng dụng sự hiểu biết là bị mờ, bạn cần phải triển khai các tập tin bản đồ về biến đổi .
- Sử dụng vị trí cột thay cho tên cột
- Thay vì tham chiếu tên của cột, sử dụng một đối số vị trí (dr [1]).
- Ưu điểm: Giúp bạn an toàn trước những thay đổi về tên.
- Nhược điểm: Mọi thứ khác. Nếu bạn thay đổi bảng để chứa dữ liệu hơn (cột mới) có một cơ hội đánh số cột cũng sẽ thay đổi, nếu có của các cột này sẽ bị xóa, bạn cũng sẽ có một vấn đề đánh số vv
Nhưng lời đề nghị. Thay vì truy cập vào cột trực tiếp thông qua một chữ, sử dụng hằng số với một số tiêu chuẩn đặt tên tốt. Vì vậy,
string name = dr["firstname"];
int age = (int)dr["age"];
trở thành
private const string CUSTOMER_COLUMN_FIRST_NAME = "firstname"
private const string CUSTOMER_COLUMN_AGE = "AGE"
string name = dr[CUSTOMER_COLUMN_FIRST_NAME];
int age = (int)dr[CUSTOMER_COLUMN_AGE];
này không giải quyết được vấn đề của bạn, nhưng nó cho phép bạn thêm ý nghĩa tốt hơn để mã (ngay cả khi bạn quyết định viết tắt tên của hằng số) và làm thay đổi tên dễ dàng hơn, vì nó được tập trung. Và, nếu bạn muốn, Visual Studio có thể tạo ra một lớp (kế thừa từ DataTable) định nghĩa tĩnh các hàng cơ sở dữ liệu của bạn, điều này cũng làm cho ngữ nghĩa mã rõ ràng hơn.
Nguồn
2009-12-18 17:01:01
Điểm hay. Câu hỏi: Vì vậy, nếu tôi tạo chế độ xem từ bảng và thay đổi các cột của bảng, chế độ xem sẽ tự động được cập nhật? Trong điểm 4 của bạn, tôi đã nghĩ về điều này, nhưng đây có phải là vấn đề nếu tôi xóa một cột hoặc thay đổi thứ tự? – Xaisoft
@Xaisoft - chế độ xem không tự động cập nhật, nó chỉ là một điểm cách nhiệt. Nếu DBA đang thay đổi tên bảng, họ nên cập nhật chế độ xem tương ứng. Xem xét nó như một hợp đồng, bạn có bảng gốc, và xem có thể giống nhau để bắt đầu. Theo thời gian, bảng được sửa đổi một cách hữu cơ, nhưng Chế độ xem đáp ứng một hợp đồng được xác định trước luôn cung cấp cùng một đầu ra dữ liệu trong cùng một định dạng bất kể cấu trúc bảng bên dưới. – BenAlabaster
ok, tôi hiểu rồi, vì vậy đó là trách nhiệm của DBA. Cảm ơn các đầu vào. – Xaisoft