gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:29:34 25 4
gpt4 key购买 nike

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

.---------------------------------------------------.
| 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 并检查 Expression Field2 的属性(property)TableDef 中的对象对于有问题的表。例如:

// 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:\Users\Public\Database1.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对象并查看 DataTableOleDbDataReader.GetSchemaTable 返回方法。 OleDb 版本不包含 IsExpression列,但您可以通过查找 IsReadOnly 所在的列来推断“已计算”状态是true .

关于c# - 确定字段是否为 MS Access 中的计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com