2015-07-10 22 views
0

我在C#中使用SQL Server Compact 3.5数据库文件(.sdf)。随着我的代码可以从albums_tbl阅读,但是当我想从其他表来读取,而它们的存在,Visual Studio 2008米中的错误是这样的:C#中不存在指定的表(SQL Server CE)

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; 
     } 
    } 
} 

当我用testi取代albums_tbl它工作得很好!但现在任何其他表的错误。

我搜查了一下,发现有人也有这个问题,但我并没有理解他们最后做了什么。

这些都是表:

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 
     } 
    } 
}