gpt4 book ai didi

c# - 是否可以使用 ADO.NET 修改 MS Access 数据库架构?

转载 作者:太空狗 更新时间:2023-10-29 23:47:37 24 4
gpt4 key购买 nike

我需要通过代码修改 MS Acess 数据库 (.mdb) 的架构

由于 Jet 引擎 DDL 语句(ALTER TABLE 等)的文档很少,我更愿意使用某种对象库,如 DAO (myDatabase.TableDefs("myTable").Fields.Append (myNewField)) 或 ADOX (myCatalog.Tables("myTable").Columns.Append(myNewField)) 或 SMO(仅适用于 SQL Server,语法相似 - 你得到这个想法)。

是否有类似于 ADOX for ADO.NET 的东西,或者我是否坚持使用 DDL 语句或引用旧的 DAO/ADOX 库?

最佳答案

我在直接的 ddl 语句方面取得了不错的成功。你说得对,语法需要一点谷歌搜索来梳理,但我已经用这种方式处理对本地数据库的更新有一段时间了。您是否有遇到问题的特定更新?基本上我写了一些辅助函数来检查表的结构并在需要时附加字段。

public bool doesFieldExist(string table, string field)
{
bool ret = false;
try
{
if (!openRouteCon())
{
throw new Exception("Could not open Route DB");
}
DataTable tb = new DataTable();
string sql = "select top 1 * from " + table;
OleDbDataAdapter da = new OleDbDataAdapter(sql, routedbcon);
da.Fill(tb);
if (tb.Columns.IndexOf(field) > -1)
{
ret = true;
}

tb.Dispose();


}
catch (Exception ex)
{
log.Debug("Check for field:" + table + "." + field + ex.Message);
}

return ret;
}


public bool checkAndAddColumn(string t, string f, string typ, string def = null)
{

// Update RouteMeta if needed.
if (!doesFieldExist(t, f))
{
string sql;
if (def == null)
{
sql = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} ", t, f, typ);
}
else
{
sql = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} DEFAULT {3} ", t, f, typ, def);
}
try
{
if (openRouteCon())
{
OleDbCommand cmd = new OleDbCommand(sql, routedbcon);
cmd.ExecuteNonQuery();
string msg = "Modified :" + t + " added col " + f;
log.Info(msg);
if (def != null)
{
try
{
cmd.CommandText = String.Format("update {0} set {1} = {2}", t, f, def);
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
log.Error("Could not update column to new default" + t + "-" + f + "-" + e.Message);
}

}
return true;
}
}
catch (Exception ex)
{
log.Error("Could not alter RouteDB:" + t + " adding col " + f + "-" + ex.Message);
}

}
else
{
return true;

}
return false;
}

关于c# - 是否可以使用 ADO.NET 修改 MS Access 数据库架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821208/

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