确定字段是否为 MS Access 中的计算字段



我有一个 Access 2013 数据库,我正在尝试用 C# 连接到它并获取有关数据库中字段的信息。一切都在工作,除了我不确定的一件事是如何确定字段是否是计算字段。这是我的访问数据库架构:

.---------------------------------------------------.
| TestTable1                                        |
|---------------------------------------------------|
| Field Name      | Data Type | Comments            |
|---------------------------------------------------|
| ID              | AutoNumber| Primary Key         |
| Field1ShortText | Short Text|                     |
| Field2LongText  | Long Text |                     |
| Field3Calculated| Calculated| Formula = 1+2       |
.---------------------------------------------------.

这是我的 C# 代码:

using (var connection = new OleDbConnection(ConnectionString))
{
    connection.Open();
    using (DataTable columns = connect.GetSchema("Columns"))
    {
        foreach (DataRow row in columns.Rows)
        {
            if (((string)row["TABLE_NAME"]).ToLower() != tableName.ToLower())
                continue;
            var field = new Field();
            field.FieldName = (string) row["COLUMN_NAME"];
            field.IsCalculated = ? // Here is where I'm stuck
        }
    }
}

我正在循环访问 Access 数据库中的所有列,并设置一个名为 IsCalculated 的属性。这是一个bool属性,如果计算true,则应false。我不确定如何确定这一点。从GetSchema返回的列称为 COLUMN_FLAGS ,其中可能包含我需要的信息。但是,我似乎找不到有关这些"标志"是什么的任何参考文档。

任何帮助将不胜感激!

我怀疑,如果您想要计算字段的明确指示,则需要使用 Access DAO 并在相关表的TableDef中检查Field2对象的Expression属性。例如:

// This code requires the following COM reference in your project:
//
//     Microsoft Office 14.0 Access Database Engine Object Library
//
// and the declaration
//
//     using Microsoft.Office.Interop.Access.Dao;
//
// at the top of the class file            
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:UsersPublicDatabase1.accdb");
foreach (Field2 fld in db.TableDefs["TestTable1"].Fields)
{
    if (fld.Expression.Length > 0)
    {
        Console.WriteLine("Field [{0}] is calculated.", fld.Name);
    }
}
db.Close();

或者,正如另一个答案所建议的那样,您可以创建一个OleDbDataReader对象并查看 OleDbDataReader.GetSchemaTable 方法返回的DataTable。OleDb 版本不包含IsExpression列,但您可以通过查找true IsReadOnly列来推断"已计算"状态。

您需要

使用 GetSchemaTable() 方法。您应该寻找的房产是IsExpression。请参阅 MSDN for SqlDataReader.GetschemaTable()

相关内容

  • 没有找到相关文章

最新更新