【求助】查询语句在Access中可执行,但在C#程序代码中没数据

未央舫 2016-03-13 01:41:58
首先:程序中,数据库连接没问题,简单的查询操作也没问题,如:select * from Table之类。
但执行类似sqlStr=" "这些复杂的语句就没数据了,如下面代码,
sqlStr语句在Access执行查询可以得到数据;在程序测试中dt表为空。
求教各位大神,到底是什么原因?
以下是相关代码:
string sqlStr = "select name from MSYSOBJECTS where type=1 and flags=0";
DataTable dt = DBHelper.GetDsFromSql(sqlStr).Tables[0];

class DBHelper
{
public static DataSet GetDsFromSql(string sqlStr)
{
string strConnection = "Provider = Microsoft.ACE.OLEDB.12.0;";
strConnection += @"Data Source =" + AppDomain.CurrentDomain.BaseDirectory + "" + Consts.c_AccessName + ".accdb";
OleDbConnection conn = new OleDbConnection(strConnection);
DataSet ds = new DataSet();
try
{
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
conn.Open();
da.Fill(ds);
}
catch (Exception e)
{
ds.Tables.Add("TempTable");
}
conn.Close();
return ds;
}
}
...全文
311 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
未央舫 2016-03-15
  • 打赏
  • 举报
回复
2010版的.accdb没有“用户和权限”功能,转换成.mdb就行了
未央舫 2016-03-14
  • 打赏
  • 举报
回复
引用 9 楼 dalmeeme 的回复:
机器上没装2010,百度搜一篇仅供参考,其实总共就那么点地方,你自己找一下也不会找不到的。
http://jingyan.baidu.com/article/ed2a5d1f5d5bbd09f6be17ae.html

多谢,但是我的数据库信息里没有用户和权限这项啊,这是啥原因?
dalmeeme 2016-03-14
  • 打赏
  • 举报
回复
机器上没装2010,百度搜一篇仅供参考,其实总共就那么点地方,你自己找一下也不会找不到的。 http://jingyan.baidu.com/article/ed2a5d1f5d5bbd09f6be17ae.html
未央舫 2016-03-14
  • 打赏
  • 举报
回复
引用 7 楼 dalmeeme 的回复:
默认的情况是admin对msysobjects没有任何权限,包括查询。 access 2003下: 工具 -> 选项 -> 视图 -> 隐藏对象、系统对象前面的勾选上。 工具 -> 安全 -> 用户与组的权限,在对象名称中选定 MSysObjects ,然后权限中设置其权限。
2010版的呢,第2个实在是找不到
dalmeeme 2016-03-13
  • 打赏
  • 举报
回复
默认的情况是admin对msysobjects没有任何权限,包括查询。 access 2003下: 工具 -> 选项 -> 视图 -> 隐藏对象、系统对象前面的勾选上。 工具 -> 安全 -> 用户与组的权限,在对象名称中选定 MSysObjects ,然后权限中设置其权限。
未央舫 2016-03-13
  • 打赏
  • 举报
回复
引用 3 楼 lovelj2012 的回复:
直接进catch了吧?单步调试下,或者先去掉try catch。
try和 catch 都执行了
未央舫 2016-03-13
  • 打赏
  • 举报
回复
引用 4 楼 dalmeeme 的回复:
MSYSOBJECTS这个表应该是Access系统内部表,默认情况下程序是没有权限访问它的,所以会抛出异常,但楼主又用try...catch代码块屏蔽了异常,所以就出现这个结果了。
异常:已捕获: "不能读取记录;在 'MSYSOBJECTS' 上没有读取数据权限。" (System.Data.OleDb.OleDbException) 捕获到一个 System.Data.OleDb.OleDbException: "不能读取记录;在 'MSYSOBJECTS' 上没有读取数据权限。" 确实没权限,在Access2010中怎么修改权限,刚百度了下,都是以前版本的,2010的找不到在哪修改
dalmeeme 2016-03-13
  • 打赏
  • 举报
回复
MSYSOBJECTS这个表应该是Access系统内部表,默认情况下程序是没有权限访问它的,所以会抛出异常,但楼主又用try...catch代码块屏蔽了异常,所以就出现这个结果了。
江南小鱼 2016-03-13
  • 打赏
  • 举报
回复
直接进catch了吧?单步调试下,或者先去掉try catch。
未央舫 2016-03-13
  • 打赏
  • 举报
回复
引用 1 楼 From_TaiWan 的回复:
打开连接应该在上面
改了,但是还是一样的
string sqlStr1 = "select * from Table";
DataTable dt1 = DBHelper.GetDsFromSql(sqlStr1).Tables[0];

string sqlStr2 = "select name from MSYSOBJECTS where type=1 and flags=0";
DataTable dt2 = DBHelper.GetDsFromSql(sqlStr2).Tables[0];          
两条语句在Access数据库中执行查询都有数据, 在程序代码测试中,dt1有数据,dt2无数据。
秋的红果实 2016-03-13
  • 打赏
  • 举报
回复
打开连接应该在上面

try
            {
                conn.Open(); //先打开连接,再建立da对象
                OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
                                da.Fill(ds);
            }
            catch (Exception e)
            {
                ds.Tables.Add("TempTable");
            }