2012-06-14 68 views
2

我是C#中的新成员。我试图查询*.accdb数据库,但响应中有0行,datagrid保持清除。查询从MS Access工作。怎么了?从C查询MS Access#

主要形式的集体

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     OleDbConnection database; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void filterButton_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show(nameFilter.Text); 

      InitializeComponent(); 
      string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\qwe.accdb;"; 
    try 
    { 
    database = new OleDbConnection(connectionString); 
     database.Open(); 

     string queryString = "SELECT id FROM table1"; 
     loadDataGrid(queryString); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
     return; 
    } 
     } 

     public void loadDataGrid(string sqlQueryString) { 

      OleDbCommand comm = new OleDbCommand(); 
      comm.CommandText = sqlQueryString; 
      comm.CommandType = CommandType.Text; 
      comm.Connection = database; 

      Int32 returnValue = comm.ExecuteNonQuery(); 

      MessageBox.Show(returnValue.ToString()); 



      OleDbCommand SQLQuery = new OleDbCommand(); 
      DataTable data = null; 
      dataGridView1.DataSource = null; 
      SQLQuery.Connection = null; 
      OleDbDataAdapter dataAdapter = null; 
      dataGridView1.Columns.Clear(); // <-- clear columns 

      SQLQuery.CommandText = sqlQueryString; 
      SQLQuery.Connection = database; 
      data = new DataTable(); 
      dataAdapter = new OleDbDataAdapter(SQLQuery); 
      dataAdapter.Fill(data); 
      dataGridView1.DataSource = data; 

      MessageBox.Show(data.ToString()); 

      dataGridView1.AllowUserToAddRows = false; // <-- remove the null line 
      dataGridView1.ReadOnly = true;   // <-- so the user cannot type 
     } 
    } 
} 
+0

是您的目标表常规表中访问或链接的表? – JamieSee

+0

table1是我在Access – skayred

+0

中创建的一个表,如果我在loadDataGrid()方法中可以看得很清楚,那么将相同的查询分配给'ExecuteNonQuery'和fill()以作为适配器? – codingbiz

回答

2

为什么不沿着线的东西:

private void filterButton_Click(object sender, EventArgs e) 
{ 
    dataGridView1.Columns.Clear(); 
    MessageBox.Show(nameFilter.Text); 
    InitializeComponent(); 
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\qwe.accdb;"; 
    try 
    { 
     using (DataTable dt = new DataTable()) 
      { 
       using (OleDbDataAdapter da = new OleDbDataAdapter(new SqlCommand("SELECT id FROM table1",new OleDbConnection(connectionString)))) 
       { 
        da.Fill(dt); 
        MessageBox.Show(dt.Rows.Count.ToString()); 
        dataGridView1.DataSource = dt; 
        dataGridView1.Update(); 
       } 
      }  

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
     return; 
    } 
}