2012-06-14 2 views
2

Я новичок в C#. Я пытаюсь запросить базу данных *.accdb, но наличие 0 строк в ответе и datagrid остается ясным. Запрос работает из MS Access. Что не так?Запрос MS Access с C#

Главная форма класса

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

Является ли ваша целевая таблица обычная таблица в Access или Связанная таблица? – 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; 
    } 
} 
Смежные вопросы