OledbConnection打开后为什么会话超时

时间:2017-09-25 11:02:22

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

我正在调用OledbConnection Microsoft Access数据库。调用该方法并检索必要的数据没有问题。

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

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

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();
    using (OleDbCommand command = new OleDbCommand(strQuerry, 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;
    }
}

被修改

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

它不会在localhost上超时,而是在实时服务器上超时。

我的connectionString如下

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

1 个答案:

答案 0 :(得分:2)

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

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

所以你的问题可以按照惯例并在该文件夹中移动数据库来解决。或者,在验证此类移动的安全后果后,强制您的网站run in FULL TRUST

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