如何获得“一般”?信息“required"从Access列(Access 2003)使用c#
本文关键字:Access 使用 2003 quot 一般 何获得 信息 required | 更新日期: 2023-09-27 18:18:18
在我对Access数据库表进行更新之前,我想知道所需的每一列是否都已填写。
所以我需要知道一列是否需要是或否
在Access的设计表模式中,我在"General"选项卡中看到了所需的信息。
但是我如何用c#代码检索这些信息?所以我不是在寻找"AllowDBNull"布尔值,而是在"General"选项卡中寻找参数"required"。
我使用的是Visual Studio 2005和Access 2003。
我这里有一个代码,它也做其他事情。我通过使用模式表检索列信息:
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 };
注意:我在这个例子中使用的一些类型和方法是我自己的,在其他地方定义的,所以如果你不根据你的需要调整它,这段代码将无法工作。
如果你有一个数据集,你也可以从system . data . dataccolumn . allowdbnull属性(未测试)中检索信息
考虑创建一个查询,显示将所需列设置为空值的行。然后,从c#的调用例程中,您可以打开查询。