gpt4 book ai didi

c# - 没有对 MSysObject 错误的读取权限

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

我正在尝试通过 OleDb 连接到 MS Access 数据库 (.mdb)。我的查询是

SELECT * FROM ListQueries

这给我带来了错误

SQL Execution Error.

Executed SQL Statement: SELECT * FROM ListQueries Error Source: Microsoft JET Database Engine Error Message: Records cannot be read; No read permission on 'MSysObjects'.

然后我试了this answer , 但它没有帮助。然后我看到另一个答案说要这样做。

strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl

我不知道如何在我的 web 项目 中实现它。正在按照 @HansUp 的建议写这样的东西

Alternatively, it should work from c# if you run it from an OleDb connection to the Access db

代码是,

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() 给我这个错误。

Cannot open the Microsoft Jet engine workgroup information file.

我真的很想知道如何授予 OleDb 调用工作权限。任何建议都会很棒

P.S:顺便说一句,我使用的是 MS Access 2010。

最佳答案

我强烈建议您不要使用 MS Access 系统对象。还有其他更好的方法来获取信息。

您可以选择 ADO和道。你更喜欢哪个?请注意,在 ADO 中,操作 (adSchemaProcedures) 和选择查询 (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;
}

关于c# - 没有对 MSysObject 错误的读取权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235430/

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