У меня здесь есть код, который делает и другие вещи. Я получаю информацию о столбце с помощью таблиц схемы:
using (DataTable dtColumns = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, restrictions)) {
string AutoNumberColumn = RetrieveAutoNumberColumn(cnn, tableSchema);
foreach (DataRow row in dtColumns.Rows) {
var col = new TableColumn();
col.ColumnName = (string)row["COLUMN_NAME"];
col.ColumnNameForMapping = prepareColumnNameForMapping(col.ColumnName);
col.ColumnAllowsDBNull = (bool)row["IS_NULLABLE"]; // <=============
col.ColumnIsIdentity = col.ColumnName == AutoNumberColumn;
DbColumnFlags flags = (DbColumnFlags)(long)row["COLUMN_FLAGS"];
col.ColumnIsReadOnly = col.ColumnIsIdentity || (flags & (DbColumnFlags.Write | DbColumnFlags.WriteUnknown)) == DbColumnFlags.None;
if (row["CHARACTER_MAXIMUM_LENGTH"] != DBNull.Value) {
col.ColumnMaxLength = (int)(long)row["CHARACTER_MAXIMUM_LENGTH"];
}
col.ColumnDbType = GetColumnDbType((int)row["DATA_TYPE"]);
col.ColumnOrdinalPosition = (int)(long)row["ORDINAL_POSITION"];
GetColumnDefaultValue(row, col);
tableSchema.ColumnSchema.Add(col);
}
}
Используйте это для параметра ограничений:
string[] restrictions = new string[] { null, null, tableName };
Примечание. Некоторые из типов и методов, которые я использовал в этом примере, являются моими собственными и определены в другом месте, поэтому этот код не будет работать, если вы не адаптируете его к своим потребностям.
Если у вас есть DataSet, вы также можете получить информацию из свойства System.Data.DataColumn.AllowDBNull (не тестировалось).