2012-06-14 6 views
2

Je suis nouveau en C#. J'essaye d'interroger une base de données *.accdb, mais avoir la ligne 0 en réponse et la grille de données reste claire. La requête fonctionne à partir de MS Access. Qu'est-ce qui ne va pas?Interrogation MS Access à partir de C#

forme principale classe

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

est votre table cible une table régulière dans Access ou une table liée? – JamieSee

+0

table1 est une table que j'ai créée dans Access – skayred

+0

si je pouvais très bien voir dans la méthode loadDataGrid(), vous affectez la même requête à 'ExecuteNonQuery' et fill() pour l'adaptateur? – codingbiz

Répondre

2

Pourquoi ne pas quelque chose le long des lignes de:

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