nav*_*een 5 c# oledb ms-access
我试图通过连接到MS Access数据库(.mdb)OleDb.我的疑问是
SELECT * FROM ListQueries
Run Code Online (Sandbox Code Playgroud)
这让我误解了
SQL执行错误.
执行的SQL语句:SELECT*FROM ListQueries错误源:Microsoft JET数据库引擎错误消息:无法读取记录; 没有'MSysObjects'的读取权限.
然后我尝试了这个答案,但它没有帮助.然后我看到另一个答案说这样做.
strDdl = "GRANT SELECT ON MSysObjects TO Admin;"
CurrentProject.Connection.Execute strDdl
Run Code Online (Sandbox Code Playgroud)
我不知道如何实现这一点web project.按照@HansUp的建议写这样的东西
或者,如果从OleDb连接到Access数据库运行它,它应该从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();
}
Run Code Online (Sandbox Code Playgroud)
第一个com.ExecuteNonQuery()给了我这个错误.
无法打开Microsoft Jet引擎工作组信息文件.
我真的想知道如何授予OleDb调用工作的权限.任何建议都会很精彩
PS:BTW,我正在使用MS Access 2010.
我强烈建议您不要使用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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |