如何使用C#或者VB.NET讀寫Access數據庫的標題(Caption)、描述(Description)等字段信息?

前幾天有人問:如何在使用 C# 或者 VB.NET 讀寫 Access 數據庫的標題信息?Access 數據庫的有些信息不能通過 ADO.NET 來讀取的,需要使用 DAO 來進行讀寫,這些屬性包括:

  • Caption
  • ColumnHidden
  • ColumnOrder
  • ColumnWidth
  • DecimalPlaces
  • Description
  • Format
  • InputMask

等等,使用 DAO 可以採用下面的方法進行讀寫,附上完整源代碼:

C# 代碼
/// 需要添加引用 Microsoft DAO 3.6 Object Library
/// 在VS 2008和Access 2003下測試通過
const int dbUseJet = 2 ;
const int dbPropNotFound = 3270 ;
const dao.DataTypeEnum dbText = dao.DataTypeEnum.dbText;

String dbName
= @" E:/WebSite1/MengXianhui/db3.mdb " ;
dao.Workspace DAOWorkspace;
dao.Database DAODatabase;
dao.DBEngine DAODBEngine
= new dao.DBEngine();
// 創建一個工作區
DAOWorkspace = DAODBEngine.CreateWorkspace( " WorkSpace " , " Admin " , "" , dbUseJet);

// 打開數據庫
DAODatabase = DAOWorkspace.OpenDatabase(dbName, false , false , null );
dao.TableDef DAOTable;
dao.Field DAOField;

// 表對象
DAOTable = DAODatabase.TableDefs[ " Table1 " ];
DAOField
= DAOTable.Fields[ " BirthDay " ];

// 讀取 UserName 字段的 “標題”屬性,如果標題沒有設置,則會拋出異常。
// 如果標題不存在,我們就添加一個標題
String CaptionText;
try
{
  CaptionText
= DAOField.Properties[ " Caption " ].Value.ToString();
}
catch
{
  
if (dbPropNotFound == DAODBEngine.Errors[ 0 ].Number)
  {
    
// 此時屬性不存在,添加一個屬性
    dao.Property dbProperty = DAOField.CreateProperty( " Caption " , dbText, " 出生日期字段標題 " , false );
    DAOField.Properties.Append(dbProperty);
    DAOField.Properties.Refresh();
    CaptionText
= DAOField.Properties[ " Caption " ].Value.ToString();
  }
  
else
  {
    CaptionText
= " 無此標題,並且未能創建標題。 " ;
  }
}
finally
{
  DAODatabase.Close();
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DAOField);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DAOTable);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DAOWorkspace);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DAODBEngine);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DAODatabase);
  DAOField
= null ;
  DAOTable
= null ;
  DAOWorkspace
= null ;
  DAOWorkspace
= null ;
  DAODatabase
= null ;
  GC.WaitForPendingFinalizers();
  GC.Collect();
}
MessageBox.Show(
" BirthDay 字段的標題是: " + CaptionText);

VB.NET寫法類似,網上也有C#轉換成VB.NET的工具,如果實在轉換不成,可以繼續找我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章