C# 创建MDB数据库、并存放表格数据的案例

下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,这是一个类,用完之后记得用Close()方法。

添加引用:

目的是//创建Catalog目录类

ADOX.CatalogClass catalog = new ADOX.CatalogClass();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;
namespace PartOfJRSpace.DataHelper
{
 public class mdbHelper
 {
  private OleDbConnection myConn;
  protected string test1;
  /// <summary>
  /// 初始化连接数据库
  /// </summary>
  /// <param name="address"></param>
  public mdbHelper(string address)
  {
   try
   {
    //创建一个 OleDbConnection对象
    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + address;
    myConn = new OleDbConnection(strCon);
    myConn.Open();
   }
   catch (Exception ex)
   {
    ex.ToString();
   }
  }
  /// <summary>
  /// 关闭数据连接
  /// </summary>
  public void CloseConnection()
  {
   myConn.Close();
  }
  /// <summary>
  /// 创建一个类型和datatable一致的空表
  /// </summary>
  /// <param name="tableName"></param>
  public void CreateTable(string tableName,DataTable dt)
  {
   try
   {
    string sql = "create table " + tableName;
    string tableAttribute = "";
    //for (int i = 0; i < dt.Columns.Count; i++)
    //{
    // tableAttribute = tableAttribute + dt.Columns[i].ColumnName + " " + GetType(dt.Columns[i].DataType.ToString()) + ",";
    //}
    //sql = sql + "(Num AUTOINCREMENT," + tableAttribute + "CONSTRAINT table_PK PRIMARYKEY(Num));";
    for (int i=0;i<dt.Columns.Count;i++)
    {
     tableAttribute = tableAttribute + dt.Columns[i].ColumnName + " " + GetType(dt.Columns[i].DataType.ToString());
     if (i < dt.Columns.Count - 1)
     {
      tableAttribute = tableAttribute + ",";
     }
    }
    sql = sql + "(" + tableAttribute + ");";
    OleDbCommand cmd = new OleDbCommand(sql, myConn);
    cmd.ExecuteNonQuery();
   }
   catch(Exception ex)
   {
    throw;
   }
  }
  /// <summary>
  /// 将datatable导入对应名字的表中
  /// </summary>
  /// <param name="path"></param>
  /// <param name="name"></param>
  /// <param name="dt"></param>
  public void DatatableToMdb(string name,DataTable dt)
  {
   try
   {

    string strCom = string.Format("select * from {0}", name);
    OleDbDataAdapter da = new OleDbDataAdapter(strCom, myConn);
    //****
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);//这里的CommandBuilder对象一定不要忘了,一般就是写在DataAdapter定义的后面
    cb.QuotePrefix = "[";
    cb.QuoteSuffix = "]";
    DataSet midData = new DataSet();
    da.Fill(midData, name);
    foreach (DataRow dR in dt.Rows)
    {
     DataRow dr = midData.Tables[name].NewRow();
     dr.ItemArray = dR.ItemArray;//行复制
     midData.Tables[name].Rows.Add(dr);
    }
    da.Update(midData,name);

   }
   catch (Exception ex)
   {
    throw;
   }
  }
  /// <summary>
  /// 获取创建mdb表格的属性字段类型
  /// </summary>
  /// <param name="datatype"></param>
  /// <returns></returns>
  private string GetType(string datatype)
  {
   switch (datatype)//匹配类型选择
   {
    case "System.String":
     return "TEXT(50)";
    case "System.DateTime":
     return "DateTime";
    case "System.Double":
     return "Double";
    case "System.Int32":
    case "System.Int16":
    case "System.Int64":
     return "Int";
    default:
     return "TEXT(50)";
   }
  }
  /// <summary>
  /// 创建Access数据库
  /// </summary>
  /// <param name="path">文件和文件路径</param>
  /// <returns>真为创建成功,假为创建失败或是文件已存在</returns>
  public static bool CreateAccessDatabase(string path)
  {
   //如果文件存在反回假
   if (File.Exists(path))
   {
    MessageBox.Show("文件已存在!");
    return false;
   }
   try
   {
    //如果目录不存在,则创建目录
    string dirName = Path.GetDirectoryName(path);
    if (!Directory.Exists(dirName))
    {
     Directory.CreateDirectory(dirName);
    }
    //创建Catalog目录类
    ADOX.CatalogClass catalog = new ADOX.CatalogClass();
    string _connectionStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path
           + ";";
    //根据联结字符串使用Jet数据库引擎创建数据库
    catalog.Create(_connectionStr);
    catalog = null;
    return true;
   }
   catch (Exception)
   {
    throw new Exception("数据库创建失败!");
   }
  }
 }

}

补充:c#操作Access,对MDB数据的table进行操作,包括新增,读取

文介绍C#访问操作Access数据库的基础知识,并提供一个相关的例程。C#的ADO.NET还不能通过编程方式创建全新的ACCESS(MDB)数据库,所以还只能使用ADOX这个来自COM的链接库来操作。

主要知识点如下:

using System.Data.OleDb;
using System.Data;

连接字符串:

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

建立连接:

OleDbConnection connection = new OleDbConnection(connectionString);

使用OleDbCommand类来执行Sql语句:

OleDbCommand cmd = new OleDbCommand(sql, connection);
connection.Open();
cmd.ExecuteNonQuery();

1.创建mdb库,例程如下:

需要注意的是:参数mdbPath是mdb的完整路径(不包含表的名称)。例如:D://test.mdb

//创建mdb
  public static bool CreateMDBDataBase(string mdbPath)
  {
   try
   {
    ADOX.CatalogClass cat = new ADOX.CatalogClass();
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";");
    cat = null;
    return true;
   }
   catch { return false; }
  }

2.创建具体的表,例程如下:

通常一个mdb的可以包含n个表。下面的程序主要是创建一个table。

//新建mdb的表
  //mdbHead是一个ArrayList,存储的是table表中的具体列名。
  public static bool CreateMDBTable(string mdbPath,string tableName, ArrayList mdbHead)
  {
   try
   {
    ADOX.CatalogClass cat = new ADOX.CatalogClass();
    string sAccessConnection
     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;
    ADODB.Connection cn = new ADODB.Connection();
    cn.Open(sAccessConnection, null, null, -1);
    cat.ActiveConnection = cn;

    //新建一个表
    ADOX.TableClass tbl = new ADOX.TableClass();
    tbl.ParentCatalog = cat;
    tbl.Name = tableName;

    int size = mdbHead.Count;
    for (int i = 0; i < size; i++)
    {
     //增加一个文本字段
     ADOX.ColumnClass col2 = new ADOX.ColumnClass();
     col2.ParentCatalog = cat;
     col2.Name = mdbHead[i].ToString();//列的名称
     col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
     tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarWChar, 500);
    }
    cat.Tables.Append(tbl); //这句把表加入数据库(非常重要)
    tbl = null;
    cat = null;
    cn.Close();
    return true;
   }
   catch { return false; }
  }

3.读取mdb内容(完全读取),例程如下:

本例程返回的是一个DataTable,如需其他格式可以自行转换。

// 读取mdb数据
  public static DataTable ReadAllData(string tableName, string mdbPath,ref bool success)
  {
   DataTable dt = new DataTable();
   try
   {
    DataRow dr;
    //1、建立连接
    string strConn
     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
    OleDbConnection odcConnection = new OleDbConnection(strConn);
    //2、打开连接
    odcConnection.Open();
    //建立SQL查询
    OleDbCommand odCommand = odcConnection.CreateCommand();
    //3、输入查询语句
    odCommand.CommandText = "select * from " + tableName;
    //建立读取
    OleDbDataReader odrReader = odCommand.ExecuteReader();
    //查询并显示数据
    int size = odrReader.FieldCount;
    for (int i = 0; i < size; i++)
    {
     DataColumn dc;
     dc = new DataColumn(odrReader.GetName(i));
     dt.Columns.Add(dc);
    }
    while (odrReader.Read())
    {
     dr = dt.NewRow();
     for (int i = 0; i < size; i++)
     {
      dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
     }
     dt.Rows.Add(dr);
    }
    //关闭连接
    odrReader.Close();
    odcConnection.Close();
    success = true;
    return dt;
   }
   catch
   {
    success = false;
    return dt;
   }
  }

4.读取mdb内容(按列读取),例程如下:

columns数组存储的是你要查询的列名称(必须确保mdb表中存在你要的列)

// 读取mdb数据
  public static DataTable ReadDataByColumns(string mdbPaht,string tableName, string[] columns, ref bool success)
  {
   DataTable dt = new DataTable();
   try
   {
    DataRow dr;
    //1、建立连接
    string strConn
     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
    OleDbConnection odcConnection = new OleDbConnection(strConn);
    //2、打开连接
    odcConnection.Open();
    //建立SQL查询
    OleDbCommand odCommand = odcConnection.CreateCommand();
    //3、输入查询语句
    string strColumn = "";
    for (int i = 0; i < columns.Length; i++)
    {
     strColumn += columns[i].ToString() + ",";
    }
    strColumn = strColumn.TrimEnd(',');
    odCommand.CommandText = "select "+strColumn+" from " + tableName;
    //建立读取
    OleDbDataReader odrReader = odCommand.ExecuteReader();
    //查询并显示数据
    int size = odrReader.FieldCount;
    for (int i = 0; i < size; i++)
    {
     DataColumn dc;
     dc = new DataColumn(odrReader.GetName(i));
     dt.Columns.Add(dc);
    }

    while (odrReader.Read())
    {
     dr = dt.NewRow();
     for (int i = 0; i < size; i++)
     {
      dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
     }
     dt.Rows.Add(dr);
    }
    //关闭连接
    odrReader.Close();
    odcConnection.Close();
    success = true;
    return dt;
   }
   catch
   {
    success = false;
    return dt;
   }
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • C#中使用XmlDocument类来创建和修改XML格式的数据文件

    通过XmlDocument类修改XML文档数据,通常需要以下几个主要步骤或其中几个步骤. (1)获取一个包含XML文档数据的XmlDocument类对象,通常有两种方法来实现这个功能: 通过XmlDocument类的构造函数创建不包含任何结点的空对象,常用默认构造函数. (2)通过XmlDocument类的ChildNodes和Item属性获取某个结点(XmlNode类型),通过XmlNode的Name.Value.InnerText等属性修改选中结点的数据. (3)通过XmlDocument类

  • C#如何使用Bogus创建模拟数据示例代码

    原文:CREATING SAMPLE DATA FOR C# 作者:Bruno Sonnino 译文:C#中使用Bogus创建模拟数据 译者: Lamond Lu 背景 在我每次写技术类博文的时候,经常做的一件事就是创建模拟数据.在每篇博文中,为了解释某些概念,我需要创建许多模拟数据.这是一个我在实际中遇到的问题,因为我需要为我的程序找到一些合适的数据.有些时候,我会从数据库中找一些数据(Northwind和AdventureWorks都是我的好朋友^.^), 有些时候,我会使用一些现成的Jso

  • C#操作SQLite数据库方法小结(创建,连接,插入,查询,删除等)

    本文实例讲述了C#操作SQLite数据库方法.分享给大家供大家参考,具体如下: SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQ

  • C#创建数据库及导入sql脚本的方法

    本文实例讲述了C#创建数据库及导入sql脚本的方法.分享给大家供大家参考,具体如下: C#创建数据库: /// <summary> /// 创建数据库 /// </summary> /// <param name="connStr">连接字符串</param> /// <param name="_strDBName">数据库名称</param> /// <returns></r

  • C#实现根据实体类自动创建数据库表

    .Net新手通常容易把属性(Property)跟特性(Attribute)搞混,其实这是两种不同的东西 属性指的类中封装的数据字段:而特性是对类.字段.方法和属性等元素标注的声明性信息 如下代码(Id.Name为User的属性,[DbKey]为Id的特性) /// <summary> /// 用户信息 /// </summary> public class User { [DbKey] public string Id { get; set; } public string Nam

  • C#创建数据库及附加数据库的操作方法

    本文实例讲述了C#创建数据库及附加数据库的操作方法.分享给大家供大家参考,具体如下: /// <summary> /// 附加数据库方法 /// </summary> /// <param name="strSql">连接数据库字符串,连接master系统数据库</param> /// <param name="DataName">数据库名字</param> /// <param name

  • C# 创建MDB数据库、并存放表格数据的案例

    下面是近期学习C#连接MDB数据库,通过路径创建MDB数据库,根据名字创建创建对用MDB数据库中的表格,再通过DataTable创建一致的表并将数据放入,这是一个类,用完之后记得用Close()方法. 添加引用: 目的是//创建Catalog目录类 ADOX.CatalogClass catalog = new ADOX.CatalogClass(); using System; using System.Collections.Generic; using System.Linq; using

  • java导出数据库中Excel表格数据的方法

    本篇文章基于java把数据库中的数据以Excel的方式导出,欢迎各位大神吐槽: 1.基于maven jar包引入如下: <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency> 2.首先创建数据库对应的实体类VO :U

  • Java实现批量导入excel表格数据到数据库中的方法

    本文实例讲述了Java实现批量导入excel表格数据到数据库中的方法.分享给大家供大家参考,具体如下: 1.创建导入抽象类 package com.gcloud.common.excel; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintStream; import java.sql.SQLException;

  • 如何将excel表格数据导入postgresql数据库

    实际的工作中,我们经常会碰到统计数据的工作,有些维度的统计数据因为工作需要我们需要导出为excel作为报表附件供不同的部门审查.为了方便以后的对比工作,领导会让在数据库中创建一张表,用于专门记录这些数据.此时我们DBA需要将这些excel表格导入到数据库中,copy和\copy命令为我们提供了解决办法,本文主要通过copy命令的使用,介绍如何将excel表格导入至数据库中.关于copy及\copy命令的区别,请广大博友通过另一篇文章<如何将postgresql数据库表内数据导出为excel格式>

  • 使用SSIS创建同步数据库数据任务的方法

    这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求.Integration Services 可以提取和转换来自多种源(如 XML 数据文件.平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标.(摘自MSDN,更多详细信息可参考:http://technet.microsoft.com/zh-cn/library/ms141026(v=sql.105).aspx) 下面我使用SSIS来演示一个实际例子.比如我有一个数据库,出于备份数据或者其它的目的,会定期的对这个数据库

  • PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例

    本文实例讲述了PHP使用PDO创建MySQL数据库.表及插入多条数据操作.分享给大家供大家参考,具体如下: 创建 MySQL 数据库: <?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername", $username, $pas

  • Springboot上传excel并将表格数据导入或更新mySql数据库的过程

    本文主要描述,Springboot-mybatis框架下上传excel,并将之导入mysql数据库的过程,如果用户id已存在,则进行更新修改数据库中该项信息,由于用到的是前后端分离技术,这里记录的主要是后端java部分,通过与前端接口进行对接实现功能,使用layui等前端框架与之对接,也可以自己写前端代码,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换 1.在pom.xml文件中导入注解,主要利用POI <dependency> <groupId>org.

  • MongoDB实现创建删除数据库、创建删除表(集合 )、数据增删改查

    一. 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用 mongod --dbpath c:\mongodb 管理 mongodb 数据库:(一定要在新的 cmd 中输入) mongo 清屏: cls 查看所有数据库列表 show dbs 二. 创建数据库 使用数据库.创建数据库 use student 如果真的想把这个数据库创建成功,那么必须插入一个数据.数据库中不能直接插入数据,只能往集合(collections)中插入数据.不需要专门创建集合,只需要写点语

  • Ajax+Asp源代码]读取数据库内容的表格(没有用框架)第1/2页

    功能: 读取数据库内容的表格.读取数据方式为ajax,分页也是.代码写得不好.呵呵.供一些学习ajax的朋友参考参考.如有不妥请大家跟贴纠正.我会根据大家的提议不断修正代码. 目前还有一个小问题,如果有朋友有兴趣帮我解决一下在下不胜感激 你翻到最后一页的时候如果只有一行会出现空白和undefined.这个问题我试了很多方法一直没有很妥当的解决. 注:下面一些地方出现笑脸表情的是 大写的d 其实很多地方都可以根据asp文件中输出的字符来控制.目前还没有往那方面完善.比如说一列显示多少行等. Asp

  • 九种防MDB数据库被下载的方法小结

    1.发挥你的想象力 修改数据库文件名  但是若攻击者通过第三方途径获得了数据库的路径,就可以下载数据库.故保密性为最低. 2.数据库名后缀改为ASA.ASP等 此法须配合一些要进行一些设置,否则就会出现本文开头的那种情况  (1)二进制字段添加. (2)在这个文件中加入<%或%>,IIS就会按ASP语法来解析,然后就会报告500错误,自然不能下载了.可是如果只是简单的在数据库的文本或者备注字段加入<%是没用的,因为ACCESS会对其中的内容进行处理,在数据库里他会以< %的形式存在

随机推荐