【问题标题】:Why session timeouts after OledbConnection open为什么 OledbConnection 打开后会话超时
【发布时间】:2017-09-25 11:02:22
【问题描述】:

我将OledbConnection 呼叫到Microsoft Access 数据库。调用该方法并检索必要的数据没有问题。

我不知道在该方法之后会话会自动超时。并进入登录页面。为什么? 我已经失去了一整天的调试和发现问题。

string strQuery = "select count(LOC1) as LOC1 from shrmwise";
DataTable dt = new DataTable();

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();

    using (OleDbCommand command = new OleDbCommand(strQuery, connection))
    {
        try
        {
            OleDbDataReader reader = command.ExecuteReader();
            dt.Load(reader);
            reader.Close();
        }
        catch (Exception ex)
        {
            throw ex;
            //Console.WriteLine(ex.Message);
        }
        finally
        {
            connection.Close();
        }
        return dt;
    }
}

已编辑

如果上面的方法调用被注释,则不会超时。

它不会在本地主机上超时,而是在实时服务器上。

我的connectionString如下

string connectionString =
       @"Provider=Microsoft.Jet.OLEDB.4.0;" +
       @"Data Source=E:\Data\MyDatabase.mdb;" +
       @"User Id=;Password=;";

【问题讨论】:

  • 您是否有权访问服务器上的文件夹 E:\Data\MyDatabase.mdb?请记住,您需要向建立连接的用户授予对该文件夹的读/写权限(如果是 ASP.NET,则为 IUSR),否则访问将永远无法正常工作。如果该文件夹位于您站点的根目录之外,您需要完全信任您的 IIS 站点才能访问该文件夹。
  • 是的,所有人都获得了完全许可
  • 如果您将该数据库移动到您网站的 APP_DATA 文件夹中,您还有问题吗? (当然相应地改变 conn 字符串)
  • 嗨@Steve,很好的发现,移动到APP_DATA后,它可以工作,没有超时。非常感谢,我已经失去了3天。请回复您的帖子,以便我将赏金分配给您

标签: c# asp.net sql-server ms-access iis


【解决方案1】:

通常在 IIS/ASP.NET 环境中,应用程序使用MEDIUM TRUST settings and not with FULL TRUST 运行。这意味着您的代码无法访问位于站点根目录之外的文件系统的任何部分。

为了解决应用程序需要一个可以读写的地方而不必担心太多安全限制的问题,我们采用了一种约定。
约定是在站点根目录下有一个名为 APP_DATA 的子文件夹,其中运行 ASP.NET 服务的用户 (IUSR) 具有读/写权限。在这里您可以放置​​您的数据库或其他读/写文件。创建子文件夹以存储不同类型的文档等。

所以你的问题可以解决,只需遵循约定并将数据库移动到该文件夹​​中。或者,在验证此类移动的安全后果后,强制您的站点使用run in FULL TRUST

当然,如果您必须手动创建 APP_DATA 文件夹,请务必同时为 IIS 用户设置正确的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多