Tôi thường xuyên phải đối phó với DataTables kết nối với điều khiển lưới, tùy chỉnh cập nhật luôn luôn dường như sản xuất rất nhiều mã liên quan đến DBNull.Value. Tôi nhìn thấy một câu hỏi tương tự ở đây nhưng nghĩ rằng phải có một câu trả lời tốt hơn:Đối phó với DBNull.Value
What is the best way to deal with DBNull's
Điều tôi thấy là tôi có xu hướng để đóng gói cập nhật cơ sở dữ liệu của tôi trong các phương pháp vì vậy tôi kết thúc với mã như dưới đây, nơi tôi di chuyển DBNull.value thành một loại nullable và sau đó trở lại để cập nhật:
private void UpdateRowEventHandler(object sender, EventArgs e)
{
Boolean? requiresSupport = null;
if (grdMainLevel1.GetFocusedRowCellValue(colASRequiresSupport) != DBNull.Value)
requiresSupport = (bool)grdMainLevel1.GetFocusedRowCellValue(colASRequiresSupport);
AdditionalSupport.UpdateASRecord(year, studentID, requiresSupport)
}
internal static void UpdateASRecord(
string year,
string studentID,
bool? requiresSupport)
{
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@year", SqlDbType.Char, 4) { Value = year });
parameters.Add(new SqlParameter("@student_id", SqlDbType.Char, 11) { Value = studentID });
if (requiresSupport == null)
parameters.Add(new SqlParameter("@requires_support", SqlDbType.Bit) { Value = DBNull.Value });
else
parameters.Add(new SqlParameter("@requires_support", SqlDbType.Bit) { Value = requiresSupport });
//execute sql query here to do update
}
Đó chỉ là một ví dụ về dòng chảy và mã không hoạt động. Tôi nhận ra rằng tôi có thể làm những thứ như vượt qua đối tượng hoặc nuốt các vấn đề tiềm năng bằng cách sử dụng "như kiểu" để nhận DBUll thẳng tới null nhưng cả hai điều này với tôi đều ẩn chứa các lỗi tiềm ẩn, tôi thích kiểu an toàn của phương thức với các kiểu nullable.
Có phương pháp nào sạch hơn để thực hiện việc này trong khi vẫn duy trì an toàn loại không?
Tại sao bạn không sử dụng trực tiếp mạnh mẽ DataRow? Bạn đã đề cập rằng bạn phải sử dụng DataTables. Nếu những bảng dữ liệu đó được đánh mạnh, bạn có thể gửi hàng dữ liệu đến phương thức của mình. Hàng dữ liệu đã sử dụng DBNull. –