服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 创建MDB数据库、并存放表格数据的案例

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

2022-10-27 13:27南方北先生 C#

这篇文章主要介绍了C# 创建MDB数据库、并存放表格数据的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

添加引用:

目的是//创建Catalog目录类

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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的链接库来操作。

主要知识点如下:

?
1
2
using System.Data.OleDb;
using System.Data;

连接字符串:

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

建立连接:

?
1
OleDbConnection connection = new OleDbConnection(connectionString);

使用OleDbCommand类来执行Sql语句:

?
1
2
3
OleDbCommand cmd = new OleDbCommand(sql, connection);
connection.Open();
cmd.ExecuteNonQuery();

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
//创建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。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//新建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,如需其他格式可以自行转换。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 读取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表中存在你要的列)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// 读取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;
   }
  }

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

原文链接:https://blog.csdn.net/qq_38370387/article/details/89189480

延伸 · 阅读

精彩推荐
  • C#C# 使用SDL2实现Mp4文件播放音视频操作

    C# 使用SDL2实现Mp4文件播放音视频操作

    这篇文章主要介绍了C# 使用SDL2实现Mp4文件播放音视频操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    boonya3472022-10-21
  • C#适用于WebForm Mvc的Pager分页组件C#实现

    适用于WebForm Mvc的Pager分页组件C#实现

    这篇文章主要为大家分享了适用于WebForm Mvc的Pager分页组件,由C#实现,感兴趣的小伙伴们可以参考一下...

    香草柠檬5132021-11-18
  • C#C#实现简单的RSA非对称加密算法示例

    C#实现简单的RSA非对称加密算法示例

    这篇文章主要介绍了C#实现简单的RSA非对称加密算法,结合实例形式分析了C#实现RSA加密的具体步骤与相关操作技巧,需要的朋友可以参考下...

    5t4rk7662022-01-20
  • C#C#实现BBcode转为Markdown的方法

    C#实现BBcode转为Markdown的方法

    这篇文章主要给大家介绍了关于C#实现BBcode转Markdown的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    lindexi9512022-02-20
  • C#Unity3D实现描边框效果

    Unity3D实现描边框效果

    这篇文章主要为大家详细介绍了Unity3D实现描边框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    即步5512022-09-01
  • C#C#微信开发之启用开发者模式

    C#微信开发之启用开发者模式

    本文主要介绍了C#微信开发中启用开发者模式的步骤与方法,具有一定的参考价值,下面跟着小编一起来看下吧...

    likar9152021-12-22
  • C#c#删除指定文件夹中今天之前的文件

    c#删除指定文件夹中今天之前的文件

    本文主要介绍了c#删除指定文件夹中今天之前文件的方法,具有很好的参考价值,下面跟着小编一起来看下吧...

    冷战10642021-12-27
  • C#C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例

    C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例

    这篇文章主要介绍了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题,简单讲述了观察者模式的原理并结合具体实例形式分析了使用观察者模式解决牛...

    GhostRider4012022-01-21