2013-08-20 2 views
0

У меня есть код, который выполняет запрос UPDATE в базе данных Access. Иногда это работает, иногда я получаю эту ошибку:Случайная ошибка открытия базы данных .accdb

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll 

Additional information: Cannot open database ''. It may not be a database that your application recognizes, or the file may be corrupt. 

Вот код:

string[] lines = File.ReadAllLines(file, Encoding.GetEncoding(1252)); //read as ANSI encoding 

OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=c:\\myDatabase.accdb"); 
con.Open(); 

for (int i = 2; i < lines.Length - 1; i++) //ignore the first 2 lines 
{ 
    string line = lines[i];   //get the current line 

    string[] values = line.Split('\t');  //split line at the tabs 

    using (OleDbCommand com = new OleDbCommand("INSERT INTO [myTable](" + 
     "[Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], " + 
    "[Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1], [Field1]" + 
    "[Field1], [Field1], [Field1]" + 
    ") VALUES (" + 
    "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" + 
    ")", con)) 
    { 
     for (int y = 0; y < 23; y++) 
    { 
     if (values[y] != "") 
     { 
      com.Parameters.Add("@p" + y + "", OleDbType.Char, 255).Value = (object)values[y] ?? DBNull.Value; 
     } 
     else 
     { 
      com.Parameters.Add("@p" + y + "", OleDbType.Char, 255).Value = DBNull.Value; 
     } 
     }  
     com.ExecuteNonQuery(); 
    } 
} 
con.Close(); 

Любая идея, что является причиной этого? Почему это работает только некоторое время? У меня нет фактического файла .accdb, открытого в Access, пока я запускаю код.

Спасибо!

EDIT: До выполнения кода, он запускает этот код просто отлично:

 OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=c:\\myDatabase.accdb"); 
     con.Open(); 

     string strCreate = "CREATE TABLE [myTable](" + 
          "[Field1] Text(255), " +    
          "[Field1] Text(255), " +   
          "[Field1] Text(255), " +    
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255), " + 
          "[Field1] Text(255))";    

     OleDbCommand cCom = new OleDbCommand(strCreate, con); 
     cCom.ExecuteNonQuery(); 

     cCom.Connection.Close(); 
+0

он терпит неудачу в 'com.ExecuteNonQuery();' –

ответ

2

Вы можете поймать исключение и внутреннее исключение? Он должен пролить свет на вопрос:

try 
    { 
     // Your Code Here 
    } 
    catch (OleDbException e) 
    { 
     Messagebox.Show(e.InnerException.Message); 
    } 
+0

это дает мне ошибку 'необработанное исключение типа«System.NullReferenceException»произошло в MYAPP.EXE Дополнительная информация: Ссылка на объект не установлена ​​в экземпляр объекта. –

+0

@JeffBrady, а что же касается только e.Message вместо e.InnerException.Message? – wilso132

+0

@JeffBrady также, какой размер файла в базе данных Access? – wilso132

Смежные вопросы