Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1210
  • Last Modified:

Could not use ''; file already in use error when opening Access database

I have a dropdown on my page that gets populated from Access dataabse. I am not using AccessDataSource but instead just using OleDbConnection object. I keep getting "Could not use ''; file already in use" error. Sometimes it works but most of the time that error comes up.  I gave ASPNET user full control to the folder where my mdb file is stored.

here is my connection string and code below:

 <add name="conn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb;" providerName="System.Data.OleDb"/>
public OleDbConnection GetConnection(string strConn)
    {
        OleDbConnection conn = null;
        try
        {
            conn = new OleDbConnection(strConn);
            conn.Open();
        }
        catch (OleDbException ex)
        {
            Console.Write("OleDb ERROR: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.Write("ERROR: " + ex.Message);
        }
        return conn;
    }

Open in new window

0
YZlat
Asked:
YZlat
  • 6
  • 4
  • 3
  • +1
1 Solution
 
SriVaddadiCommented:
It might be that you missed to close the connection once you are done with it. Please make sure you close the connection in all scenarios.

You would find a mdb lock file under the the same folder where ur mdb file is sitting. please delete that file and you should be all set.

If you are not able to delete the file. close the application and try.
0
 
YZlatAuthor Commented:
The Access application is closed at all times and I do clode the connection after reading data;
cmd.ExecuteReader(CommandBehavior.CloseConnection);
0
 
SriVaddadiCommented:
are you closing your data reader? I meant closing your .net application and the access application. close your asp.net development servers sitting in the system tray and try deleting the lock files if any.
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
Vikram Singh SainiSoftware Engineer cum AD DeveloperCommented:
Hi,

Please check link:
http://support.microsoft.com/kb/289681

Regards,
VSS
0
 
YZlatAuthor Commented:
Yes, I am closing the data reader.

Also what i noticed is that sometimes app loads data into dropdown fine and when I select an item from a dropdown, it displays data on the page, but if I try to select another item the second time around, it also gives me this error. What can i do to fix it?
0
 
Vikram Singh SainiSoftware Engineer cum AD DeveloperCommented:
Hi,

You didn't respond for link.

Regards,
VSS
0
 
SriVaddadiCommented:
Could you post your code ? So we could understanding what is happening around
0
 
YZlatAuthor Commented:

public OleDbDataReader ExecuteSimpleQuery(string query, string strConn)
    {
        OleDbConnection conn = GetConnection(strConn);
        OleDbDataReader rdr = null;
        try
        {

            using (OleDbCommand cmd = new OleDbCommand(query, conn))
            {
                rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
        }
        catch (Exception ex)
        {
            Console.Write("Error executing query " + query + ": " + ex.Message);
            rdr.Close();
            rdr = null;
        }

        return rdr;
    }

Open in new window

0
 
YZlatAuthor Commented:
vs00saini, the database is not on the server. Instead it's on the same machine as the web application. It's an access database
0
 
Vikram Singh SainiSoftware Engineer cum AD DeveloperCommented:
Hi,

I agree that database is not on the server. But however you are creating web application. Then either you are using inbuilt server of VS or your system would be considered as server in that case.

Is your same folder is having .ldb files to prevent different users to access same resource at a time.

Regards,
VSS
0
 
YZlatAuthor Commented:
It's not a permissions issue, i checked before I posted the question here
0
 
Vikram Singh SainiSoftware Engineer cum AD DeveloperCommented:
Hi,

After carefully reading your both following points:

(1) here is my  connection string and code below:

 <add name="conn"  connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data  Source=C:\Northwind.mdb;" providerName="System.Data.OleDb"/>


(2) Also what i noticed is that sometimes app loads data into dropdown fine  and when I select an item from a dropdown, it displays data on the page,  but if I try to select another item the second time around, it also  gives me this error. What can i do to fix it?

I reached at some conclusion that:

(1) (This is my answer based on my development experience and knowledge) Rectify me if I am wrong at some point. After all mistakes are part of learning...

Your Data Source is at location C:\Northwind.mdb, so what actually is happening behind the scene is that when you are creating connection, and using the file (with extension .mdb), you are actually using this file handle (& yes I agree that .Net automatically manages this) but sometimes if the same file's handle is in memory, and in between if GC.Dispose() is not called, you would get error of above type (sometimes you also get file is used in by another process). So what should be the solution for this: Try the code as:

public OleDbDataReader ExecuteSimpleQuery(string query, string strConn)
    {
        OleDbConnection conn = GetConnection(strConn);
        OleDbDataReader rdr = null;
        try
        {

            using (OleDbCommand cmd = new OleDbCommand(query, conn))
            {
                rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
        }
        catch (Exception ex)
        {
            Console.Write("Error executing query " + query + ": " + ex.Message);
            rdr.Close();
            rdr = null;
        }

        OleDbConnection conn = null; //So that all resources are released.
         OleDbDataReader rdr = null;

        return rdr;
    }

(2) See all comments of gopijoshi                                  at link: http://forums.aspfree.com/microsoft-iis-12/could-not-use-file-already-in-use-error-strange-variation-34803.html

(3) And last if your database is corrupted then also the same problem comes. So better to check if it is not corrupted.

Let us know if the problem still persists or solved out.

Regards,
VSS
0
 
YZlatAuthor Commented:
I actually didn't have to change anything in my code, it just started working
0
 
dejandejanovicCommented:
FINALLY SOLUTION ALSO FOR ME.
To reset all resources, posted by Vikram was helpful form.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 6
  • 4
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now