首页 新闻 会员 周边

网站运行错误

0
[已关闭问题]

我的一个网站在IIS下打开出现问题,但在VS2005自带的IIS下没有问题,开发环境是:windows2003 IIS6.0  VS2005 数据库是access 错误提示:

没有可用的错误消息,结果代码: E_FAIL(0x80004005)。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 没有可用的错误消息,结果代码: E_FAIL(0x80004005)。

源错误:

行 43:             using (OleDbCommand cmd = new OleDbCommand(sql, conn))行 44:             {行 45:                 conn.Open();行 46:                 using (OleDbDataReader dr = cmd.ExecuteReader())行 47:                 {


源文件: e:\My Site\craftszoe.com\App_Code\craftszone.cs    行: 45

堆栈跟踪:

[OleDbException (0x80004005): 没有可用的错误消息,结果代码: E_FAIL(0x80004005)。]   System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +969373   System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +29   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +4863644   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117   System.Data.OleDb.OleDbConnection.Open() +40   craftszone.GetProductType(String sql) in e:\My Site\craftszoe.com\App_Code\craftszone.cs:45   _Default.Page_Load(Object sender, EventArgs e) in e:\My Site\craftszoe.com\Default.aspx.cs:19   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35   System.Web.UI.Control.OnLoad(EventArgs e) +99   System.Web.UI.Control.LoadRecursive() +50   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
hebeiping的主页 hebeiping | 初学一级 | 园豆:110
提问于:2010-03-07 17:39
< >
分享
其他回答(3)
0

针对这个问题我想请问你是否在sql语句中使用了Access数据库不支持的sql语法(比如case when等)以及是否使用了Access数据库中的关键字啊啊???能把你出现这个错误的那段sql代码页贴出来吗??

西越泽 | 园豆:10775 (专家六级) | 2010-03-07 17:48
出错代码 public static Hashtable GetProductType(string sql) { Hashtable ht = new Hashtable(); using (OleDbConnection conn1 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) { using (OleDbCommand cmd = new OleDbCommand(sql, conn1)) { conn1.Open(); using (OleDbDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { ht.Add(dr[0], dr[1]); } } } } return ht; }
支持(0) 反对(0) hebeiping | 园豆:110 (初学一级) | 2010-03-07 18:04
@hebeiping:可以发一下你传入的sql代码吗?
支持(0) 反对(0) 西越泽 | 园豆:10775 (专家六级) | 2010-03-07 23:13
0

可以贴一下你的sql语句吗?

langford | 园豆:710 (小虾三级) | 2010-03-07 19:01
0

VS2005自带的IIS是一个小型的模拟器,只能在调试时使用。

实际部署时不可以用这个,应该使用window系统的IIS,所以在开发过程建议也将"项目"--“属性”--“web”部分设为外部的IIS,即windows系统的IIS。

你的程序在VS2005自带的IIS时不出错。而在部署时,access文件路径找不到所以出错。所以建议
1、在开发时使用:http://localhost/yourApplication/

或直接用端口http://localhost:8089/

然后点出创建虚拟目录即可同时在iis中生效。

2、部署时在IIS设置亦可。

邀月 | 园豆:25475 (高人七级) | 2010-03-08 08:24
0

这个错误微软早就有揭示: http://support.microsoft.com/kb/295297

错误的原因是:

The account that is being used to access the page does not have access to the HKEY_LOCAL_MACHINE\SOFTWARE\ODBC registry key.

IIS运行账户,无权访问注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC registry

 

可以用regedit32.exe作相应修改:

  1. Start Registry Editor (Regedt32.exe).
  2. Select the following key in the registry:
    HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
  3. On the Security menu, click Permissions.
  4. Type the required permissions for the account that is accessing the Web page.
  5. Quit Registry Editor.
肉猫 | 园豆:220 (菜鸟二级) | 2010-03-08 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册