开发工具:vs2005 + access2003
在vs2005中点击运行,对数据库的操作都能实现,不存在任何问题
在编写工作完成后,便发布网站,整个过程没有出现任何错误然后我在iis中新建了一个网站(win2003 sp1),浏览时,只要是有操作数据库的页面均出现错误,内容如下:////////////////////////////////////////////////////////////////错误信息开始//////////////////////////“/”应用程序中的服务器错误。
未指定的错误
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误源错误:执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。堆栈跟踪:[OleDbException (0x80004005): 未指定的错误]
   System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1054737
   System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +53
   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +27
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +47
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
   System.Data.OleDb.OleDbConnection.Open() +37
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +121
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +137
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +83
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1746
   System.Web.UI.WebControls.AccessDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +71
   System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +96
   System.Web.UI.WebControls.ListControl.PerformSelect() +31
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +68
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +61
   System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +26
   System.Web.UI.Control.PreRenderRecursiveInternal() +110
   System.Web.UI.Control.PreRenderRecursiveInternal() +193
   System.Web.UI.Control.PreRenderRecursiveInternal() +193
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6532////////////////////////////////////////////错误信息结束/////////////////////////////////////////////////////////数据库的链接我使用了两种:
1.自己编写代码链接,链接字段如下:static String dbname = System.Web.HttpContext.Current.Server.MapPath("~/app_data/info.mdb");
        static String strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dbname;
2.通过空间accessDataScource自动生成的连接错误出现后,我修改了网站中数据库文件的权限,但是没有任何效果请大虾们不吝赐教……

解决方案 »

  1.   

    connection对象你是怎么管理的?是每次连接重新生成一个connection还是从头到尾只用了一个connection对象?
      

  2.   

    制作、发布是使用的一台机器connection是在需要执行语句时创建的
    我将所有的数据库操作都存放在一个类中类的内容如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.OleDb;namespace My
    {
        /// <summary>
        /// db 的摘要说明
        /// </summary>
        public class Base
        {        static String dbname = System.Web.HttpContext.Current.Server.MapPath("~/app_data/info.mdb");
            static String strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dbname;        protected static string strSQL;        public Base()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            /// <summary>
            /// executing SQL commands
            /// </summary>
            /// <param name="strSQL">string</param>
            /// <returns>return int</returns>
            protected static int ExecuteSql(string strSQL)
            {
                OleDbConnection myCn = new OleDbConnection(strConn);
                OleDbCommand myCmd = new OleDbCommand(strSQL, myCn);
                
                try
                {
                    myCn.Open();
                    myCmd.ExecuteNonQuery();
                    return 0;
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    myCmd.Dispose();
                    myCn.Close();
                }
            }
            /// <summary>
            ///executing SQL commands
            /// </summary>
            /// <param name="strSQL">要执行的SQL语句,为字符串类型string</param>
            /// <returns>返回执行情况,整形int</returns>
            protected static int ExecuteSqlEx(string strSQL)
            {
                OleDbConnection myCn = new OleDbConnection(strConn);
                OleDbCommand myCmd = new OleDbCommand(strSQL, myCn);            try
                {
                    myCn.Open();
                    //只能这样创建一个SqlDataReader,因为该类没有公共的构造函数mfq
                    OleDbDataReader myReader = myCmd.ExecuteReader();
                    //只调用一次,只能返回一行数据记录
                    if (myReader.Read())
                    {
                        return 0;
                    }
                    else
                    {
                        throw new Exception("Value Unavailable!");
                    }
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    myCmd.Dispose();
                    myCn.Close();
                }
            }
            /// <summary>
            /// get dataset
            /// </summary>
            /// <param name="strSQL">(string)</param>
            /// <returns>(DataSet)</returns>
            protected static DataSet ExecuteSql4Ds(string strSQL)
            {
                OleDbConnection myCn = new OleDbConnection(strConn);
                try
                {
                    myCn.Open();
                    OleDbDataAdapter sda = new OleDbDataAdapter(strSQL, myCn);
                    DataSet ds = new DataSet("ds");
                    sda.Fill(ds);
                    return ds;
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception("查询出错:" + e.Message);
                }
                finally
                {
                    myCn.Close();
                }
            }
            /// <summary>
            /// get single value
            /// </summary>
            /// <param name="strSQL">(string)</param>
            /// <returns>(int)</returns>
            protected static int ExecuteSql4Value(string strSQL)
            {
                OleDbConnection myCn = new OleDbConnection(strConn);
                OleDbCommand myCmd = new OleDbCommand(strSQL, myCn);
                try
                {
                    myCn.Open();
                    object r = myCmd.ExecuteScalar();
                    if (Object.Equals(r, null))
                    {
                        throw new Exception("Value Unavailable!");
                    }
                    else
                    {
                        return (int)r;
                    }
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    myCmd.Dispose();
                    myCn.Close();
                }
            }
            /// <summary>
            /// get object
            /// </summary>
            /// <param name="strSQL">(string)</param>
            /// <returns>(object)</returns>
            protected static object ExecuteSql4ValueEx(string strSQL)
            {
                OleDbConnection myCn = new OleDbConnection(strConn);
                OleDbCommand myCmd = new OleDbCommand(strSQL, myCn);
                try
                {
                    myCn.Open();
                    object r = myCmd.ExecuteScalar();
                    if (Object.Equals(r, null))
                    {
                        throw new Exception("object unavailable!");
                    }
                    else
                    {
                        return r;
                    }
                }
                catch (System.Data.OleDb.OleDbException e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    myCmd.Dispose();
                    myCn.Close();
                }
            }            }
    }
      

  3.   

    补充一下:我在网站也使用了托管生成的dataSourceID
      

  4.   

    唉,问题出现的原因已经找到了
    刚刚我将发布好的网站copy到另一台机器上(winXP fat32格式的分区),完全没有问题,看来只是权限的问题了。
    那位大虾指导一下,那几个文件权限的配置不合理会产生这样的错误呢。
    注:在此之前,我已经考虑到权限的问题,将网站所在的文件夹设为everyone 完全控制