这是我使用C#重新链接DAO表的解决方案.
我的应用程序使用一个中央MS Access数据库和8个链接的实际数据库.中央数据库本地存储到我的C#应用程序,但应用程序允许8个数据数据库位于其他位置.在启动时,我的C#app基于app.config设置重新链接中央数据库中的DAO表.
除了注意,这个数据库结构是原本是一个MS访问应用程序,我移植到VB6我的应用程序的结果.我目前正在将我的应用转换为C#.我可以移出在VB6或C#的MS Access,但它是一个非常易于使用的桌面数据库解决方案.
在中央数据库中,我创建了一个名为linkedtables有三列表名,LinkedTableName和数据库名称表.
在App开始时,我称之为例程
Common.RelinkDAOTables(Properties.Settings.Default.DRC_Data
, Properties.Settings.Default.DRC_LinkedTables
, "SELECT * FROM LinkedTables");
Run Code Online (Sandbox Code Playgroud)
Default.DRC_Data - 中央访问DB Default.DRC_LinkedTables的当前文件夹 - 8个数据的数据库的当前文件夹
这是代码在C#中实际重新链接DAO表
public static void RelinkDAOTables(string MDBfile, string filepath, string sql)
{
DataTable linkedTables = TableFromMDB(MDBfile, sql);
dao.DBEngine DBE = new dao.DBEngine();
dao.Database DB = DBE.OpenDatabase(MDBfile, false, false, "");
foreach (DataRow row in linkedTables.Rows)
{
dao.TableDef table = DB.TableDefs[row["Name"].ToString()];
table.Connect = string.Format(";DATABASE={0}{1} ;TABLE={2}", filepath, row["database"], row["LinkedName"]);
table.RefreshLink();
}
}
Run Code Online (Sandbox Code Playgroud)
编写附加代码以从访问数据库获取数据并将其作为DataTable返回
public static DataTable TableFromOleDB(string Connectstring, string Sql)
{
try
{
OleDbConnection conn = new OleDbConnection(Connectstring);
conn.Open();
OleDbCommand cmd = new OleDbCommand(Sql, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
return table;
}
catch (OleDbException)
{
return null;
}
}
public static DataTable TableFromMDB(string MDBfile, string Sql)
{
return TableFromOleDB(string.Format(sConnectionString, MDBfile), Sql);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7198 次 |
| 最近记录: |