天天看点

无需安装access用C#创建数据库,创建表

首先引用msadox.dll和msjro.dll(C:\Program Files\Common Files\System\ado\),msjro.dll可以从网上下载,然后引用

[csharp] view plain copy

  1. using ADOX;  
  2. using JRO;  
  3. using System.IO;  

然后编写相关函数

[csharp] view plain copy

  1. /// <summary>  
  2.      /// 创建数据库  
  3.      /// </summary>  
  4.      /// <param name="mdbPath">路径</param>  
  5.      public void Create(string mdbPath)  
  6.      {  
  7.          if (File.Exists(mdbPath)) //检查数据库是否已存在     
  8.          {  
  9.              throw new Exception("目标数据库已存在,无法创建");  
  10.          }  
  11.          // 可以加上密码,这样创建后的数据库必须输入密码后才能打开     
  12.          mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;  
  13.          // 创建一个CatalogClass对象的实例,     
  14.          ADOX.CatalogClass cat = new ADOX.CatalogClass();  
  15.          // 使用CatalogClass对象的Create方法创建ACCESS数据库     
  16.          cat.Create(mdbPath);  
  17.          //创建数据库后关闭连接  
  18.          System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection);  
  19.          System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat);  
  20.      }  
  21.      /// <summary>  
  22.      /// 连接数据库  
  23.      /// </summary>  
  24.      /// <param name="filename">文件名包含路径</param>  
  25.      /// <returns>返回连接字符串</returns>  
  26.      public ADODB.Connection Connection(string filename)  
  27.      {  
  28.          ADODB.Connection con = new ADODB.Connection();  
  29.          con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename, null, null, -1);  
  30.          return con;  
  31.      }  
  32.      /// <summary>  
  33.      /// 创建数据表  
  34.      /// </summary>  
  35.      /// <param name="con">连接字符串</param>  
  36.      /// <param name="table_name">表的名称</param>  
  37.      /// <param name="column">字段</param>  
  38.      public void CreateTable(ADODB.Connection con,string table_name,params Column[] column)  
  39.      {  
  40.          CatalogClass cat = new CatalogClass();  
  41.          cat.ActiveConnection = con;  
  42.          Table table = new Table();  
  43.          Column col = new Column();  
  44.          col.ParentCatalog = cat;  
  45.          col.Type = DataTypeEnum.adInteger;  
  46.          col.Name = "ID";  
  47.          col.DefinedSize = 9;  
  48.          col.Properties["AutoIncrement"].Value = true;  
  49.          table.Columns.Append(col, DataTypeEnum.adInteger, 9);  
  50.          table.Keys.Append("FirstPrimaryKey",KeyTypeEnum.adKeyPrimary,col, null, null);  
  51.          table.Name = table_name;  
  52.          foreach (Column item in column)  
  53.          {  
  54.              table.Columns.Append(item);  
  55.          }  
  56.          cat.Tables.Append(table);  
  57.          //创建数据库后关闭连接  
  58.          System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection);  
  59.          System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat);  
  60.      }  

示例:

[csharp] view plain copy

  1. private void button1_Click(object sender, EventArgs e)  
  2.         {  
  3.             Create(Path.Combine(Application.StartupPath, "test.mdb"));  
  4.             Column col=new Column();  
  5.             col.Name="Name";  
  6.             col.Type=DataTypeEnum.adVarWChar;  
  7.             col.DefinedSize=50;  
  8.             CreateTable(Connection(Path.Combine(Application.StartupPath, "test.mdb")),"testtable", col);  
  9.         }  

转载于:https://www.cnblogs.com/netuml/articles/3261306.html