2012-10-03 53 views
1

有沒有辦法找出哪些列可以在DataTable中爲空?我知道有一個proprety:DataColumn.AllowDBNull,它可以在DataSet的設計模式中設置爲true或false,但我希望直接從數據庫獲取這些信息。如何找出DataTable中哪些列可以爲空?

我有一個DGV填充來自MySQL數據庫的值,並已將DGV的DataSource綁定到DataTable。

+0

是否要直接爲可空列或數據庫查詢DataTable? –

+0

如果可能,我想查詢DataTable。我在DataTable離線時輸入新數據。有沒有辦法讓DataTable存儲可爲空和不可爲空的列的信息? – user1654847

回答

0

您可以使用以下方法來確定哪些數據表中的DataColumns可以爲空(有AllowDBNull設置爲true):

var nullableDataColumns = dataTable.Columns.Cast<DataColumn>().Where(c => c.AllowDBNull); 
foreach (var col in nullableDataColumns) { 
    Console.WriteLine(col.ColumnName); 
} 
+0

不幸的是,默認情況下,所有的DataColumn.AllowDBNull都設置爲true,除非您自己更改DataSet設計模式中的值。 – user1654847

1

作爲一個解決方案,我決定來檢索數據庫的列的架構,並從那裏分配其中Collumns AllowDBNull:

 DataTable dbColumnsSchema; 
    using (MySqlConnection connection = new MySqlConnection(ConnectionString)) 
     { 
      connection.Open(); 
     dbColumnsSchema = connection.GetSchema("Columns"); 
      connection.Close(); 

     } 

     AssignMandatoryColumns(dbColumnsSchema); 

    } 

    private void AssignMandatoryColumns(DataTable table) 
    { 
     foreach (DataRow row in table.Rows) 
      if (row["TABLE_NAME"].ToString()==myTableName) 
       if(row["IS_NULLABLE"].ToString()=="NO") 
       { string columnName = row["COLUMN_NAME"].ToString(); 
        myDataSet.Tables[myTableName].Columns[columnName]. 
         AllowDBNull = false; 
       } 
    } 
相關問題