zoukankan      html  css  js  c++  java
  • C#动态创建Access数据库,创建加密码Access数据库,更改Access密码

    以前工作中需要全新的Access数据库,可以复制数据库,也可以把新的数据库放到资源里面,用新数据库的时候释放出来,都感觉不爽,还是动态生成心理舒服。

    生成数据库要使用ADO,首先添加引用。


    using System.IO;
    using System.Data.OleDb;        //连接Access数据库
    using ADOX;                              //引用COM:Microsoft ADO Ext. 2.8 for DDL and Security 

                                                      //添加引用:Microsoft ActioveX Data Objects 2.8 Library

    Access1

    创建数据库:

    然后使用ADODB创建数据库,直接看代码:

       1: string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName;
       2:             
       3: //创建数据库
       4: ADOX.Catalog catalog = new Catalog();
       5: try
       6: {
       7:     catalog.Create(conn); 
       8: }
       9: catch
      10: {}
      11:  
      12:  
      13: //连接数据库
      14: ADODB.Connection cn = new ADODB.Connection();
      15: cn.Open(conn, null, null, -1);                       
      16: catalog.ActiveConnection = cn;
      17:  
      18: //新建表
      19: ADOX.Table table = new ADOX.Table();
      20: table.Name = "AdPlayList";
      21:  
      22: ADOX.Column column = new ADOX.Column();
      23: column.ParentCatalog = catalog;
      24: column.Type = ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型
      25: column.Name = "ID";
      26: column.DefinedSize = 9;
      27: column.Properties["AutoIncrement"].Value = true;
      28: table.Columns.Append(column, DataTypeEnum.adInteger, 0);
      29: //设置主键
      30: table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "ID", "", "");
      31:  
      32: table.Columns.Append("FileName", DataTypeEnum.adVarWChar, 50);
      33: table.Columns.Append("FileDate", DataTypeEnum.adDate, 0);
      34: table.Columns.Append("FileSize", DataTypeEnum.adInteger, 9);
      35: table.Columns.Append("OrderID", DataTypeEnum.adInteger, 9);
      36: table.Columns.Append("Sha1", DataTypeEnum.adVarWChar, 50);
      37:  
      38: try
      39: {
      40:     catalog.Tables.Append(table);
      41: }
      42: catch (Exception ex)
      43: {
      44:     MessageBox.Show(ex.Message);
      45: }
      46: //此处一定要关闭连接,否则添加数据时候会出错
      47:  
      48: table = null;
      49: catalog = null;
      50: Application.DoEvents();
      51: cn.Close();

    创建加密码数据库

    创建加密数据库的时候可把我难住了,因为在Access中加密码的时候是以独占方式打开,然后加密码。所以总是想创建完数据库以后再加密,试了试没有成功,最后转变一下思想,在生成的时候加密码怎么样,一试果然成功了。

       1: //创建不带密码的连接语句
       2: string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName;
       3: //创建加密码的连接语句,pwd是密码
       4: string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Jet OLEDB:Database Password=" + Pwd + ";Jet OLEDB:Engine Type=5";            

    更改数据库密码:

    SQL更改数据库密码的语句是:ALTER DATABASE PASSWORD [NewPassword] [OldPassword]

    用OleDbConnection打开数据库执行此SQL语句根本不行,所以我就用ADODB打开数据库执行,但是报以下错误:

     Access3

    给Access添加密码的时候会要求以“是以独占方式打开”,所以要设置打开的模式,详细说明如下:

    ADO ConnectModeEnum含义 设置或返回以下某个 ConnectModeEnum 的值。

    常量                                          说明
    AdModeUnknown                      默认值。表明权限尚未设置或无法确定。
    AdModeRead                            表明权限为只读。
    AdModeWrite                            表明权限为只写。
    AdModeReadWrite                    表明权限为读/写。
    AdModeShareDenyRead          防止其他用户使用读权限打开连接。
    AdModeShareDenyWrite          防止其他用户使用写权限打开连接。
    AdModeShareExclusive            防止其他用户打开连接。
    AdModeShareDenyNone          防止其他用户使用任何权限打开连接。

    更改数据库代码如下:

       1: string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Jet OLEDB:Database password=" + openpwd;
       2: string sql = "ALTER DATABASE PASSWORD " + newpwd + " " + openpwd;
       3: ADODB.Connection cn = new ADODB.Connection();
       4: cn.Mode = ADODB.ConnectModeEnum.adModeShareExclusive;
       5: cn.Open(conn, null, null, -1);
       6: // 执行 SQL 语句以更改密码。
       7: object num;
       8: cn.Execute(sql, out num, -1);
       9: cn.Close();

    如果你要忘了加的密码,可以使用使用密码查看工具“破解密码unaccess”,在代码里面文件夹里呢。

    代码下载

  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/wk986/p/1823948.html
Copyright © 2011-2022 走看看