zoukankan      html  css  js  c++  java
  • C#读写Access数据库、表格datagridview窗体显示代码实例

    C#读写Access数据库、表格datagridview窗体显示代码实例

    最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对于MySQLOracle数据库的操作放到后面再写。

    Access是微软数据库编辑软件,其生成的数据库文件为.mdb.accdb,因此在Visual Studio里不像操纵MySQL那样需要使用mysql数据库驱动,系统库里有关于操纵数据库的几个类。说下其中几个主要用到的类:

    System.Data;

    System.Data.OleDb;

    System.Data.Odbc;

    System.Data.SqlClient;

     

    先简单说下C#对于Access数据库的几个基本操作原理:

     

    C#操作Access连接字符串

    String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=mydata.mdb";

     

    C#操作Access建立连接

    OleDbConnection connection = new OleDbConnection(connectionString);

     

    C#操作Access使用OleDbCommand类执行Sql语句

    OleDbCommand cmd = new OleDbCommand(sql, connection);

    connection.Open();

    cmd.ExecuteNonQuery();

     

    [1]连接Access数据库

    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\mydata.mdb");

    [2]连接SQL Server2000数据库

    SqlConnection conn = new SqlConnection("server=.; uid=admin; pwd=123456; database=mydata");

    [3]受信任的SQL Server2000数据库

    SqlConnection conn = new SqlConnection("workstation id=localhost; Integrated Security=SSPI; database=mydata");

    [4]ASP中链接SQL Server/Access数据库:(网页)

    (SQL Server):

           conn.connectionstring = "driver={sql server}; server=(local); uid=admin; pwd=123456; database=mydata"

    (Access):

    conn.connectionstring = "Driver={Microsoft Access Driver(*.mdb)}; DBQ=" & Server.Mappath("mydata.mdb")

    !!!注意:→在asp中,语句结束不需要" ; "

    --------------------------------------------------------------------------------------------------------------------------------------------

    一、创建.mdb数据库

    //创建.mdb,注意参数path是.mdb的完整路径(不包含表的名称)
    //C#的ADO.NET不能通过编程方式创建新的ACCESS(MDB)数据库,所以只能用COM的链接库的ADOX操作
    public static bool CreateMdbDatabase(string path)
    {
        try
        {
           ADOX.CatalogClass cat = new ADOX.CatalogClass();
           cat.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";");
           cat = null;
           return true;
        }
        catch
        {
           return false;
        }
    }
    


    二、C#写入记录到Access数据库

    Sql插入数据库操作,一次只能插入一条记录,多条记录插入只能通过"循环"实现,效率不高;

    或者要么更快地就是开启事务(保证数据一致性)→循环插入→最后数据再一起导入。

    【实例】在Form上创建一个textbox和一个button,点击buttontextbox中的数据写入到access数据库中。

    1.首先创建一个空Access数据库datainput.mdb并写入相应字段:


    2.读写数据库时应当将数据库关闭,再运行程序进行写操作

    using System.Data.Oledb;
    private void button1_Click(object sender, EventArgs e)
    {
    foreach (IACell cell in m_DistributedCells)
    {
       //把cell.FrequencyBand、cell.UlFrequency、cell.DlFrequency全部写入数据库表.mdb里去
      //string sql_0 = "insert into table (column1,column2) values('" + textbox.Text + "','" + textbox.Text +"')"; //构造sql语句
       string sql = "";
       if (cell.ChannelIndex == 1)
      {
          sql = "insert into datawrite(ChannelIndex, BandWidth, StartChIndex, EndChIndex, ExcludedChannels, UlFrequency, DlFrequency, ACIR) values('" + 1 + "','" + 20 + "','" + 0 + "','" + 1 + "','" + 1 + "','" + 2402 + "','" + 2422 + "','" + 0 + "')";
       }
       else if (cell.ChannelIndex == 6)
       {
         sql = "insert into datawrite(ChannelIndex, BandWidth, StartChIndex, EndChIndex, ExcludedChannels, UlFrequency, DlFrequency, ACIR) values('" + 6 + "','" + 20 + "','" + 5 + "','" + 6 + "','" + 6 + "','" + 2427 + "','" + 2447 + "','" + 0 + "')";
       }
       else if (cell.ChannelIndex == 11)
      {
         sql = "insert into datawrite(ChannelIndex, BandWidth, StartChIndex, EndChIndex, ExcludedChannels, UlFrequency, DlFrequency, ACIR) values('" + 11 + "','" + 20 + "','" + 10 + "','" + 11 + "','" + 11 + "','" + 2452 + "','" + 2472 + "','" + 0 + "')";
      }
    //access数据库路径,注意一定是双斜杠\,否则会被当成转义字符! 
    string dbpath = "D:\data\datainput.mdb";
    //定义数据库连接对象
      OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + dbpath);
      OleDbCommand cmd = new OleDbCommand(sql, con); //定义Command对象
      con.Open(); //打开数据库连接
      cmd.ExecuteNonQuery(); //执行Command命令
      con.Close(); //关闭数据库连接
     }
    }
    
    运行程序,点击button后(断点只循环1次),再次打开刚才的数据库表,此时表里已插入1条记录。

     


    三、读出数据库的值——C#界面显示表格datagridview

    【实例】将现有Access数据库表格内的数据以datagridview的形式显示在C#窗体中。

    1.现有的数据库,50条记录。

    2.代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb; //主要是这个东西,其实已经包含在System.Data类里了,这里特别提出来注明下
    namespace text01
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                OleDbConnection thisConnection = new OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:dataread.mdb");
                string sql = "select * from dataread";
                OleDbDataAdapter thisAdapter = new OleDbDataAdapter(sql, thisConnection);
                System.Data.DataSet thisDataSet = new System.Data.DataSet();
                thisAdapter.Fill(thisDataSet, "table");
                DataTable dt = thisDataSet.Tables["table"];
                this.dataGridView1.DataSource = dt;
                thisConnection.Close();
            }
        }
    }
    

    效果图:

  • 相关阅读:
    [ACM] hdu 1848 Fibonacci again and again(Nim博弈 SG函数)
    [ACM] hdu 2176 取(m堆)石子游戏(Nim博弈)
    [ACM] hdu 1850 Being a Good Boy in Spring Festival(Nim博弈)
    母函数
    Euclid算法(欧几里得算法)
    Poj 2533
    Poj 1836
    Poj 3267
    hdu 1878
    poj 3349
  • 原文地址:https://www.cnblogs.com/DianaCody/p/5425709.html
Copyright © 2011-2022 走看看