Cách tốt nhất để kiểm tra xem Bảng dữ liệu có giá trị rỗng trong đó hay không


87

cách tốt nhất để kiểm tra xem Bảng dữ liệu có giá trị null trong đó là gì?

Hầu hết thời gian trong kịch bản của chúng tôi, một cột sẽ có tất cả các giá trị rỗng.

(Dữ liệu này được trả về bởi một ứng dụng của bên thứ 3 - chúng tôi đang cố gắng thực hiện một biện pháp khắc phục trước khi ứng dụng của chúng tôi xử lý bảng dữ liệu)


Câu trả lời:


164

Thử so sánh giá trị của cột với DBNull.Valuegiá trị để lọc và quản lý giá trị null theo bất kỳ cách nào bạn thấy phù hợp.

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}

Thông tin thêm về lớp DBNull


Nếu bạn muốn kiểm tra xem giá trị null có tồn tại trong bảng hay không, bạn có thể sử dụng phương pháp này:

public static bool HasNull(this DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
            return true;
    }

    return false;
}

mà sẽ cho phép bạn viết điều này:

table.HasNull();

1
Phương pháp tốt nhất cho nơi mà phương pháp mở rộng này nên thực hiện là gì?
StuperUser

6
Tôi thường tạo thư mục "Tiện ích mở rộng" trong một số thư viện chung hoặc trong DAL của tôi. Tạo một tệp có tên "DataTableExtensions.cs" và thêm phương thức đó. Tiếp theo, bạn chỉ cần thêm "using Name.Space.Extensions" vào các tệp cs của mình và có quyền truy cập vào tất cả các phương thức mở rộng được xác định.
hunter

3
Bạn có thể (bây giờ) sử dụng table.AsEnumerable()thay vìtable.Rows.OfType<DataRow>()
Teejay 14/12/16

23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}

11

Bạn có thể ném vòng lặp các hàng và cột, kiểm tra giá trị null, theo dõi xem có giá trị null với bool hay không, sau đó kiểm tra nó sau khi lặp qua bảng và xử lý nó.

//your DataTable, replace with table get code
DataTable table = new DataTable();
bool tableHasNull = false;

foreach (DataRow row in table.Rows)
{
    foreach (DataColumn col in table.Columns)
    {
        //test for null here
        if (row[col] == DBNull.Value)
        {
            tableHasNull = true;
        }
    }
}

if (tableHasNull)
{
    //handle null in table
}

Bạn cũng có thể thoát khỏi vòng lặp foreach với câu lệnh break, ví dụ:

//test for null here
if (row[col] == DBNull.Value)
{
    tableHasNull = true;
    break;
}

Để lưu lặp qua phần còn lại của bảng.



0

Bạn có thể null / blank / space Giá trị Etc bằng cách sử dụng LinQ Sử dụng truy vấn sau

   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);

Dưới đây Thay ColumnName với tên và cột trong bảng "" mục tìm kiếm của bạn trong đoạn code trên chúng ta tìm giá trị null.


0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}

5
Mặc dù mã này có thể trả lời câu hỏi, nhưng tốt hơn là giải thích cách giải quyết vấn đề và cung cấp mã làm ví dụ hoặc tài liệu tham khảo. Các câu trả lời chỉ có mã có thể khó hiểu và thiếu ngữ cảnh.
Robert Columbia,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.