关于连接数据库的错误,不明白???

fsxiyu 2007-03-01 09:51:24
下面是代码片断:

OleDbConnection Conn;
OleDbCommand Cmd;
OleDbDataReader DR;

string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\SimpleArticleSystem\DB070226.mdb";
Conn = new OleDbConnection(ConnString);
Conn.Open();

Cmd = new OleDbCommand();
Cmd.Connection = Conn;
Cmd.CommandType = CommandType.Text;
Cmd.CommandText = "Select LanguageID From Language Where Default = True Order By LanguageID";

DR = Cmd.ExecuteReader();

运行到最后一句的时候总会提示:
“IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。”错误。为什么呢?
数据库联接串和SQL语句应该都是没有问题的。。。
数据库没有设置密码,文件访问权限应该也是没有问题的。
...全文
289 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsxiyu 2007-03-01
  • 打赏
  • 举报
回复
改成这样还是不行:
Cmd.CommandText = "Select LanguageID From Language";

还有貌似“Default”不是Access的关键字。反正我的那个SQL语句在Access里是可以运行的。
liujia_0421 2007-03-01
  • 打赏
  • 举报
回复
你的字段名用到了Access的关键字...

加上[]后再试试看...
liujia_0421 2007-03-01
  • 打赏
  • 举报
回复
try..

Cmd.CommandText = "Select LanguageID From Language Where [Default] = True Order By LanguageID";
fsxiyu 2007-03-01
  • 打赏
  • 举报
回复
运行到“DR = Cmd.ExecuteReader();”就出错了。
我干脆把整个错误都贴出来。希望有朋友能解决。。。

IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。

源错误:

行 34: Cmd.CommandText = "Select LanguageID From Language Where Default = True Order By LanguageID";
行 35:
行 36: DR = Cmd.ExecuteReader();
行 37:
行 38:

源文件: e:\SimpleArticleSystem\Default.aspx.cs 行: 36

堆栈跟踪:

[OleDbException (0x80004005): IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +65
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +181
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +307
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +77
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +188
System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) +123
System.Data.OleDb.OleDbCommand.ExecuteReader() +26
_Default.Page_Load(Object sender, EventArgs e) in e:\SimpleArticleSystem\Default.aspx.cs:36
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +31
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +68
System.Web.UI.Control.OnLoad(EventArgs e) +88
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3035

--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.210
best8625 2007-03-01
  • 打赏
  • 举报
回复
Debug进去
fsxiyu 2007-03-01
  • 打赏
  • 举报
回复
检查了一下数据库,觉得应该不是数据库本身的问题。
我现在改成Odbc就没有问题了:

OdbcConnection Conn;
OdbcCommand Cmd;
OdbcDataReader DR;

string ConnString = @"Driver={Microsoft Access Driver (*.mdb)};DBQ=E:\SimpleArticleSystem\DB070226.mdb";
Conn = new OdbcConnection(ConnString);
Conn.Open();

Cmd = new OdbcCommand();
Cmd.Connection = Conn;
Cmd.CommandType = CommandType.Text;
Cmd.CommandText = "Select LanguageID From Language Where Default = True Order By LanguageID";

DR = Cmd.ExecuteReader();

只是更换了类而以,其他东西基本没有变。
现在就没有出错了,难道是我的系统本身的Oledb的驱动程序有问题???
jtl510 2007-03-01
  • 打赏
  • 举报
回复
建议你通过udl访问看看
sunrobust 2007-03-01
  • 打赏
  • 举报
回复
看起来好像是GetDescription除了问题啊,貌似是数据库Schema无法取得,所以无法执行sql语句.
楼主好好检查一下你的mdb文件
lytxxt 2007-03-01
  • 打赏
  • 举报
回复
加一句conn.close() try try
fsxiyu 2007-03-01
  • 打赏
  • 举报
回复
非常感谢大家的帮助问题现在解决了,下面总结一下。
正如SnowLover所说的确实由于保留字引起的。
问题在于“Language”是OleDb驱动程序的保留字,在SQL语句中不能直接引用。
必须用中括号括起来才能正确引用,否则运行该SQL语句时会出错。

但是“Language”却不是Odbc驱动程序的保留字,在SQL语句中完全可以不带中括号直接引用。
在Access数据库里面也是一样可以不带中括号直接引用。
liujia_0421 2007-03-01
  • 打赏
  • 举报
回复
以前见过这个异常,原因就是在sql语句中用到了关键字..

试试这样:

Cmd.CommandText = "Select [LanguageID] From [Language]";

如果不行,我也不清楚了..

关注一下..

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧