Cách kiểm tra xem một cột có tồn tại trong một cơ sở dữ liệu hay không


91

Tôi có một dữ liệu được tạo với nội dung của một tệp csv. Tôi sử dụng thông tin khác để ánh xạ một số cột của csv (hiện đã có trong dữ liệu) thành thông tin mà người dùng được yêu cầu điền vào.

Trong thế giới tốt nhất, việc lập bản đồ sẽ luôn khả thi. Nhưng đây không phải là thực tế ... Vì vậy, trước khi tôi cố gắng ánh xạ giá trị cột có thể dữ liệu, tôi cần kiểm tra xem cột đó có tồn tại hay không. Nếu tôi không thực hiện kiểm tra này, tôi có một ArgumentException.

Tất nhiên tôi có thể kiểm tra điều này bằng một số mã như sau:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

nhưng hiện tại tôi có 3 cột để lập bản đồ và một số hoặc tất cả có thể đang tồn tại / bị thiếu

Có cách nào tốt để kiểm tra xem một cột có tồn tại trong một cơ sở dữ liệu không?


Bạn đang đối phó với một DataSet/ DataTable? Nếu vậy, bạn có thể xem bộ sưu tập Cột của bảng để biết danh sách tất cả các cột trong bảng.
asawyer,

Có, @asawyer nội dung của csv được đưa vào một cơ sở dữ liệu. Tôi sẽ có một cái nhìn theo hướng này.
Rémi

Câu trả lời:


192

Bạn có thể sử dụng operator Contains,

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains ()


bạn có chắc đây là linq? Tôi không có bất kỳ tham chiếu đến LINQ trong mã của tôi và công việc này
Rémi

đó là điều hành đơn giản của cột
Aghilas Yakoub

Đây không phải là một phương thức mở rộng linq, đúng hơn là một thành viên của kiểu DataColumnCollection, nhưng cũng sẽ hoạt động tốt.
asawyer

5
@AghilasYakoub Chắc chắn là, tôi quên mất điều đó. Có lẽ là cách tốt hơn để đi trong trường hợp này. Tuy nhiên, có một điều, "Bạn có thể sử dụng Toán tử Chứa" - Nó không phải là một toán tử, nó là một phương thức thành viên.
asawyer


8

Đối với Nhiều cột, bạn có thể sử dụng mã tương tự như mã được đưa ra bên dưới. Tôi chỉ xem qua điều này và tìm thấy câu trả lời để kiểm tra nhiều cột trong Datatable.

 private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
    {
        bool iscolumnExist = true;
        try
        {
            if (null != tableNameToCheck && tableNameToCheck.Columns != null)
            {
                foreach (string columnName in columnsNames)
                {
                    if (!tableNameToCheck.Columns.Contains(columnName))
                    {
                        iscolumnExist = false;
                        break;
                    }
                }
            }
            else
            {
                iscolumnExist = false;
            }
        }            
        catch (Exception ex)
        {

        }
        return iscolumnExist;
    }


0
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
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.