使用 C# OleDB 连接检查访问数据库中是否存在某个 table
Check for existence of a certain table in access DB using C# OleDB connection
我正在努力寻找一个有效的答案来解决我正在寻找的问题。
基本上,我想检查是否例如:
"tableNO1" 存在,或者如果每隔 table 存在...
顺便说一下,我正在使用 Access 2002-2003,如果这有帮助的话:)
您认为我应该升级到最新版本吗?
背景:
我正在尝试创建 运行-time 按钮,每个按钮都有一个 DB table,当我关闭程序时,我为每个 [=28= 创建的 tables ]-时间创建的按钮将被保存。再次启动程序后,我应该单击一个按钮,该按钮将添加这些具有 DB table 的按钮(每个按钮都有一个专用的 table)。例如,如果之前在程序中创建了 9 个 运行-time 按钮 - 每个按钮都会有一个 DB table。我将有一个最多 9 个按钮,每个按钮都将被命名为 tableNO(n) n=number of table
当我第一次单击创建 运行 次按钮的按钮时,它将创建一个名为“tableNO1”的按钮,第二次将创建“tableNO2”,等等...
提前致谢。
好的,有几种方法可以做到这一点,但我建议使用以下代码:
public Boolean TableExist(string sTable)
{
using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB2))
{
conn.Open();
string[] sRestrict = new string[] {null,null,null,null};
sRestrict[2] = sTable;
DataTable MySchema = new DataTable();
MySchema = conn.GetSchema("Columns",sRestrict);
return (MySchema.Rows.Count > 0);
}
}
以上也是如何将模式 (table def) 作为 table.
因此,说
if (TableExist("tblHotels")
{
// your code here
}
现在,因为您可以(很可能)使用循环,那么出于性能原因,您可能会考虑将有效连接传递给 TableExist 函数,因此对于您的循环而言,不是 re-create 每个连接时间 - 因为这会减慢速度。
请注意,“很多”经常建议这样做:
SELECT * FROM MSysObjects WHERE [Name] = 'tableNO1' AND Type = 1
默认情况下,上述问题是 MySysObjects 需要提升的权限。可以打开数据库,然后使用安全设置访问 MySysOjbects 的权限可以更改 - 但它比上面的工作更多 code/function.
我正在努力寻找一个有效的答案来解决我正在寻找的问题。 基本上,我想检查是否例如:
"tableNO1" 存在,或者如果每隔 table 存在...
顺便说一下,我正在使用 Access 2002-2003,如果这有帮助的话:) 您认为我应该升级到最新版本吗?
背景: 我正在尝试创建 运行-time 按钮,每个按钮都有一个 DB table,当我关闭程序时,我为每个 [=28= 创建的 tables ]-时间创建的按钮将被保存。再次启动程序后,我应该单击一个按钮,该按钮将添加这些具有 DB table 的按钮(每个按钮都有一个专用的 table)。例如,如果之前在程序中创建了 9 个 运行-time 按钮 - 每个按钮都会有一个 DB table。我将有一个最多 9 个按钮,每个按钮都将被命名为 tableNO(n) n=number of table 当我第一次单击创建 运行 次按钮的按钮时,它将创建一个名为“tableNO1”的按钮,第二次将创建“tableNO2”,等等...
提前致谢。
好的,有几种方法可以做到这一点,但我建议使用以下代码:
public Boolean TableExist(string sTable)
{
using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB2))
{
conn.Open();
string[] sRestrict = new string[] {null,null,null,null};
sRestrict[2] = sTable;
DataTable MySchema = new DataTable();
MySchema = conn.GetSchema("Columns",sRestrict);
return (MySchema.Rows.Count > 0);
}
}
以上也是如何将模式 (table def) 作为 table.
因此,说
if (TableExist("tblHotels")
{
// your code here
}
现在,因为您可以(很可能)使用循环,那么出于性能原因,您可能会考虑将有效连接传递给 TableExist 函数,因此对于您的循环而言,不是 re-create 每个连接时间 - 因为这会减慢速度。
请注意,“很多”经常建议这样做:
SELECT * FROM MSysObjects WHERE [Name] = 'tableNO1' AND Type = 1
默认情况下,上述问题是 MySysObjects 需要提升的权限。可以打开数据库,然后使用安全设置访问 MySysOjbects 的权限可以更改 - 但它比上面的工作更多 code/function.