DataTableでnull許容の列を見つける方法はありますか?データセットのデザインモードでtrueまたはfalseに設定できるDataColumn.AllowDBNullというプロパティがあることは知っていますが、この情報をデータベースから直接取得したいと思います。
MySQLデータベースからの値がDGVに入力されており、DGVのデータソースをDataTableにバインドしています。
DataTableでnull許容の列を見つける方法はありますか?データセットのデザインモードでtrueまたはfalseに設定できるDataColumn.AllowDBNullというプロパティがあることは知っていますが、この情報をデータベースから直接取得したいと思います。
MySQLデータベースからの値がDGVに入力されており、DGVのデータソースをDataTableにバインドしています。
解決策として、データベースの列スキーマを取得し、そこからどの列を 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;
}
}
以下を使用して、DataTable 内のどの DataColumn が null 許容である ( AllowDBNull
true に設定されている)かを判別できます。
var nullableDataColumns = dataTable.Columns.Cast<DataColumn>().Where(c => c.AllowDBNull);
foreach (var col in nullableDataColumns) {
Console.WriteLine(col.ColumnName);
}