詳解C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及密碼
以前工作中需要全新的Access數(shù)據(jù)庫,可以復(fù)制數(shù)據(jù)庫,也可以把新的數(shù)據(jù)庫放到資源里面,用新數(shù)據(jù)庫的時(shí)候釋放出來,都感覺不爽,還是動(dòng)態(tài)生成心理舒服。
生成數(shù)據(jù)庫要使用ADO,首先添加引用。
- using System.IO;
 - using System.Data.OleDb; //連接Access數(shù)據(jù)庫
 - using ADOX;
 - //引用COM:Microsoft ADO Ext. 2.8 for DDL and Security
 - //添加引用:Microsoft ActioveX Data Objects 2.8 Library
 
創(chuàng)建數(shù)據(jù)庫:
然后使用ADODB創(chuàng)建數(shù)據(jù)庫,直接看代碼:
- string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName;
 - //創(chuàng)建數(shù)據(jù)庫
 - ADOX.Catalog catalog = new Catalog();
 - try
 - {
 - catalog.Create(conn);
 - }
 - catch
 - {}
 - //連接數(shù)據(jù)庫
 - ADODB.Connection cn = new ADODB.Connection();
 - cn.Open(conn, null, null, -1);
 - catalog.ActiveConnection = cn;
 - //新建表
 - ADOX.Table table = new ADOX.Table();
 - table.Name = "AdPlayList";
 - ADOX.Column column = new ADOX.Column();
 - column.ParentCatalog = catalog;
 - column.Type = ADOX.DataTypeEnum.adInteger; // 必須先設(shè)置字段類型
 - column.Name = "ID";
 - column.DefinedSize = 9;
 - column.Properties["AutoIncrement"].Value = true;
 - table.Columns.Append(column, DataTypeEnum.adInteger, 0);
 - //設(shè)置主鍵
 - table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "ID", "", "");
 - table.Columns.Append("FileName", DataTypeEnum.adVarWChar, 50);
 - table.Columns.Append("FileDate", DataTypeEnum.adDate, 0);
 - table.Columns.Append("FileSize", DataTypeEnum.adInteger, 9);
 - table.Columns.Append("OrderID", DataTypeEnum.adInteger, 9);
 - table.Columns.Append("Sha1", DataTypeEnum.adVarWChar, 50);
 - try
 - {
 - catalog.Tables.Append(table);
 - }
 - catch (Exception ex)
 - {
 - MessageBox.Show(ex.Message);
 - }
 - //此處一定要關(guān)閉連接,否則添加數(shù)據(jù)時(shí)候會(huì)出錯(cuò)
 - table = null;
 - catalog = null;
 - Application.DoEvents();
 - cn.Close();
 
創(chuàng)建加密碼數(shù)據(jù)庫:
創(chuàng)建加密數(shù)據(jù)庫的時(shí)候可把我難住了,因?yàn)樵贏ccess中加密碼的時(shí)候是以獨(dú)占方式打開,然后加密碼。所以總是想創(chuàng)建完數(shù)據(jù)庫以后再加密,試了試沒有成功,***轉(zhuǎn)變一下思想,在生成的時(shí)候加密碼怎么樣,一試果然成功了。
- //創(chuàng)建不帶密碼的連接語句
 - string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName;
 - //創(chuàng)建加密碼的連接語句,pwd是密碼
 
更改數(shù)據(jù)庫密碼:
SQL更改數(shù)據(jù)庫密碼的語句是:
- ALTER DATABASE PASSWORD [NewPassword] [OldPassword]
 
用OleDbConnection打開數(shù)據(jù)庫執(zhí)行此SQL語句根本不行,所以我就用ADODB打開數(shù)據(jù)庫執(zhí)行,但是報(bào)以下錯(cuò)誤:
給Access添加密碼的時(shí)候會(huì)要求以“是以獨(dú)占方式打開”,所以要設(shè)置打開的模式,詳細(xì)說明如下:
ADO ConnectModeEnum含義 設(shè)置或返回以下某個(gè) ConnectModeEnum 的值。
常量                                          說明 
AdModeUnknown                      默認(rèn)值。表明權(quán)限尚未設(shè)置或無法確定。 
AdModeRead                            表明權(quán)限為只讀。 
AdModeWrite                            表明權(quán)限為只寫。 
AdModeReadWrite                    表明權(quán)限為讀/寫。 
AdModeShareDenyRead          防止其他用戶使用讀權(quán)限打開連接。 
AdModeShareDenyWrite          防止其他用戶使用寫權(quán)限打開連接。 
AdModeShareExclusive            防止其他用戶打開連接。 
AdModeShareDenyNone          防止其他用戶使用任何權(quán)限打開連接。
更改數(shù)據(jù)庫代碼如下:
- string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Jet OLEDB:Database password=" + openpwd;
 - string sql = "ALTER DATABASE PASSWORD " + newpwd + " " + openpwd;
 - ADODB.Connection cn = new ADODB.Connection();
 - cn.Mode = ADODB.ConnectModeEnum.adModeShareExclusive;
 - cn.Open(conn, null, null, -1);
 - // 執(zhí)行 SQL 語句以更改密碼。
 - object num;
 - cn.Execute(sql, out num, -1);
 - cn.Close();
 
如果你要忘了加的密碼,可以使用使用密碼查看工具“破解密碼unaccess”,在代碼里面文件夾里呢。
原文標(biāo)題:C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫,創(chuàng)建加密碼Access數(shù)據(jù)庫,更改Access密碼
鏈接:http://www.cnblogs.com/wk986/archive/2010/09/11/1823948.html

















 
 
 



 
 
 
 