我正在尝试通过OleDb
连接到MS Access数据库(.mdb)。我的问题是
SELECT * FROM ListQueries
提取错误
SQL执行错误。
执行的SQL语句:SELECT * FROM ListQueries 错误源:Microsoft JET数据库引擎 错误消息:无法读取记录;没有'MSysObjects'的读取权限。
然后我尝试this answer,但没有帮助。然后我看到另一个答案说要做到这一点。
strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl
我不知道如何在web project
中实现这一点。根据{{3}}
或者,如果从OleDb连接到Access db
运行它,它应该从c#开始工作
代码是,
OleDbConnection con;
using (con = new OleDbConnection(Connection.connectionString()))
{
con.Open();
using (var com = new OleDbCommand("GRANT SELECT ON MSysObjects TO Admin", con))
{
com.ExecuteNonQuery();
}
using (var com = new OleDbCommand("Select * from ListQueries", con))
{
using (var dr = com.ExecuteReader())
{
while (dr.Read())
{
qryList.Add(SQLReaderExtensions.SafeGetString(dr, "Name"));
}
dr.Close();
}
}
con.Close();
}
第一个com.ExecuteNonQuery()
给了我这个错误。
无法打开Microsoft Jet引擎工作组信息文件。
我真的很想知道如何授予OleDb调用工作的权限。任何建议都会很精彩
P.S:顺便说一下,我正在使用MS Access 2010。
答案 0 :(得分:8)
我强烈建议您不要使用MS Access系统对象。还有其他更好的方法来获取信息。
您可以选择ADO和DAO。你更喜欢哪个?请注意,在ADO中,action(adSchemaProcedures)和select查询(adSchemaViews)之间存在差异。
例如,
public static List<string> GetAllQueriesFromDataBase()
{
var queries = new List<string>();
using (var con = new OleDbConnection(Connection.connectionString()))
{
con.Open();
var dt = con.GetSchema("Views");
queries = dt.AsEnumerable().Select(dr => dr.Field<string>("TABLE_NAME")).ToList();
}
return queries;
}