C#数据库连接

时间:2011-12-17 12:32:02

标签: c# .net datatable

我通过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 个答案:

答案 0 :(得分:2)

无论其他事情(例如未使用using语句等打开单个连接),您根本不会将新加载的DataTableDataGridView连接起来。您的Form1_Load方法只是将数据加载到DataTable,然后有效地将其丢弃。

我怀疑你想要这样的东西:

 dataGridView.DataSource = dt;

在方法结束时。

编辑:请注意,这也是OpenConnection代码中非常糟糕的想法:

catch (Exception ex)
{
}

这基本上说,“如果出现问题,不要记录这个事实或改变其余代码的工作原理 - 只要继续前进,好像什么也没发生过。”

你为什么要捕捉这个例外?

答案 1 :(得分:0)

尝试编写简单的代码。我建议您使用OleDbDataAdaper,其Fill()方法可以轻松填充DataTable

您可以使用| DataDirectory |如果您使用位于Bin \ Debug文件夹下的数据库(.mdb)。

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;

答案 2 :(得分:0)

当我将DB文件移动到bin/debug时,会显示一条错误消息“4.0未安装”。

然而,当我把它移到bin时,问题就解决了。

我的代码:

      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();