2015-07-10 3 views
0

Я использую файл базы данных SQL Server Compact 3.5 (.sdf) в C#. С кодом я могу читать из albums_tbl, но когда я хочу прочитать из других таблиц в то время как они существуют, Студийные ошибки Визуальные 2008, как это:Указанная таблица (SQL Server CE) не существует в C#

enter image description here

Это мой код:

void FillAllitems() 
{ 
    // 1 
    // Open connection 
    SqlCeConnection cnt = new SqlCeConnection(@"Data Source = C:\com_honar\test1.sdf "); 
    { 
     cnt.Open(); 

     // 2 
     // Create new DataAdapter 
     using (SqlCeDataAdapter at = new SqlCeDataAdapter("SELECT * FROM testi ", cnt)) 
     { 
        // 3 
        // Use DataAdapter to fill DataTable 
        DataTable tt = new DataTable(); 
        at.Fill(tt); 
        // 4 
        // Render data onto the screen 
        dataGridView2.DataSource = tt; 
     } 
    } 
} 

Когда Я заменяю albums_tbltesti, он работает отлично! Но теперь ошибки для любых других таблиц.

Я искал и нашел, что у кого-то тоже была эта проблема, но я не понял, что они сделали в конце концов.

Эти таблицы:

enter image description here

+0

Я вижу, что test1.sdf база данных отсоединяется. Возможно, это причина. –

+0

Действительно ли это файл базы данных, а не тот, который будет скопирован в каталог bin *, если он еще не существует * или что-то еще? –

+0

Если это связано с отдельной базой данных, cnt.Open(); потерпит неудачу. – DanielV

ответ

0

Поскольку я не знаю ни одной другой части вашего кода, я думаю, соединение может быть обработаны немного лучше, заключив его в использовании блока, так что он автоматически закрывается. Я также удалил дополнительное пространство в части DataSource. Как так:

void FillAllitems(){ 
    using (SqlCeConnection cnt = new SqlCeConnection(@"Data Source=C:\com_honar\test1.sdf")) { 
     cnt.Open();                   // Open connection 
     using (SqlCeDataAdapter at = new SqlCeDataAdapter("SELECT * FROM testi", cnt)){  // Create new DataAdapter 
      DataTable tt = new DataTable(); 
      at.Fill(tt);                 // Use DataAdapter to fill DataTable 
      dataGridView2.DataSource = tt;             // Render data onto the screen 
     } 
    } 
} 

Я также рекомендовал бы использовать в командной строитель:

var sqCB = new SqlCeCommandBuilder(dataAdapter); 

как так:

void FillAllitems(){ 
    using (SqlCeConnection cnt = new SqlCeConnection(@"Data Source=C:\com_honar\test1.sdf")) { 
     cnt.Open();                   // Open connection 
     using (SqlCeDataAdapter at = new SqlCeDataAdapter("SELECT * FROM testi", cnt)){  // Create new DataAdapter 
      var sqCB = new SqlCeCommandBuilder(at); 
      DataTable tt = new DataTable(); 
      at.Fill(tt);                 // Use DataAdapter to fill DataTable 
      dataGridView2.DataSource = tt;             // Render data onto the screen 
     } 
    } 
} 
Смежные вопросы