Соединение с базой данных C # - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть домашняя работа о подключении к базе данных через ms доступ.

Я подготовил свою базу данных и сохранил ее как dbMert и поместил в debug / bin

Это мой класс CustomerDatabase для подключения кбаза данных:

static class CustomerDatabase
{

    static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbMert.mdb";
    static OleDbConnection connection = null;
    static OleDbCommand command = null;


    public static void ConnectToDatabase()
    {
        if (connection == null)
        {
            connection = new OleDbConnection(connectionstring);
            command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "select * from Customer";
        }
    }     

    public static DataTable executeSelect(string sql)
    {
        ConnectToDatabase();
        DataTable dt = null;
        dt = new DataTable();
        command.CommandText = sql;
        OpenConnection();
        OleDbDataReader datareader = command.ExecuteReader();
        dt.Load(datareader);
        datareader.Close();
        CloseConnection();
        return dt;
    }

    public static void OpenConnection()
    {
        try
        {
            if (connection != null)
            {
                connection.Open();
            }
        }
        catch (Exception ex)
        {
        }
    }

    public static void CloseConnection()
    {
        if (connection != null)
        {
            connection.Close();
        }
    }


}

}

Форма: в конструкторе я пытаюсь подключиться к базе данных

public Form1()
{
    InitializeComponent();
    CustomerDatabase.ConnectToDatabase();
}

и в загрузке формы я пытаюсь передать кортежи в datagridview, но ничегобывает: S

private void Form1_Load(object sender, EventArgs e)
{
    string sql1 = "select * from Customer";
    DataTable dt = CustomerDatabase.executeSelect(sql1);
}

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Независимо от других вещей (например, не поддерживая одно соединение открытым, используя операторы using и т. Д.), Вы вообще не подключаете только что загруженный DataTable к DataGridView.Ваш Form1_Load метод просто загружает данные в DataTable, а затем фактически выбрасывает их.

Я подозреваю, что вы хотите что-то вроде:

 dataGridView.DataSource = dt;

вконец метода.

РЕДАКТИРОВАТЬ: Обратите внимание, что это также очень плохая идея в вашем OpenConnection коде:

catch (Exception ex)
{
}

Это в основном говорит "Если что-то идет не так, не беспокойтесь о том, чтобы записать этот факт или изменить работу остального кода - просто продолжайте, как будто ничего не произошло. "

Почему вы вообще ловите исключение?

0 голосов
/ 18 декабря 2011

Когда я перемещаю DB-файл в bin/debug, появляется сообщение об ошибке «4.0 не установлено».

Однако, когда я перемещаю его в мусорное ведро, проблема решается.

Мой код:

      con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ..\\dbMert.mdb";
      con.Open();


    recordları
      DataSet ds = new DataSet();
      DataTable dt = new DataTable();
      ds.Tables.Add(dt);
      OleDbDataAdapter da = new OleDbDataAdapter();



      da = new  OleDbDataAdapter("Select * from Customer", con);
      da.Fill(dt);

      dataGridView1.DataSource = dt;






      foreach (DataRow row in dt.Rows)
      {
          foreach (DataColumn col in dt.Columns)
              if(col.ToString() == "emailAdress")
              comboBox1.Items.Add(row[col]);
      }




      con.Close();
0 голосов
/ 17 декабря 2011

Попробуйте написать простой код.Я предлагаю вам использовать OleDbDataAdaper , его метод Fill () легко заполняет DataTable.

Вы можете использовать | DataDirectory |если вы используете базу данных (.mdb), расположенную в папке Bin \ Debug.

static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;
                             Data Source=|DataDirectory|\dbMert.mdb";

Или

static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;
                              Data Source=x:\full_path\dbMert.mdb";

Или

static string connectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;
                              Data Source=x:\full_path\dbMert.mdb";

static class Test
{
    static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbMert.mdb";
    public static DataTable executeSelect(string sql)
    {
        DataTable dt = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connectionString);
        adapter.Fill(dt);
        return dt;
    }
}

Добавьте следующий код в обработчик form_load,

 string sql1 = "select * from Customer";
 DataTable dt = Test.executeSelect(sql1);
 DataGridView1.DataSource=dt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...