我有一个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
的{{1}}返回的列,可能包含我需要的信息。但是,我似乎无法找到关于这些“标志”的参考文献。
任何帮助将不胜感激!
答案 0 :(得分:2)
我怀疑如果你想要一个计算字段的明确指示,你需要使用Access DAO并检查表float lat = ...
float lon = ...
String addr = URLEncoder.encode("my address", "UTF-8");
java.net.URI(
"geo",
"" + lat + "," + lon + "?q=" + addr,
null);
中Expression
对象的Field2
属性有问题。例如:
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.GetSchemaTable方法返回的OleDbDataReader
。 OleDb版本不包含DataTable
列,但您可以通过查找IsExpression
为IsReadOnly
的列来推断“已计算”状态。
答案 1 :(得分:0)
您需要使用GetSchemaTable()
方法。您应该寻找的属性是IsExpression
。请参阅MSDN for SqlDataReader.GetschemaTable()