16.2 Access数据库安全
由于Access数据库操作简单,使用方便,所以一些中小型的应用软件经常采用Access数据库。为了保证数据库的安全,经常要加密或锁定数据库,如果数据库由于某种原因遭到破坏,就需要对数据库进行修复。下面的几个实例分别实现了加密、锁定和修复Access数据库的功能。
实例466 如何编程修复Access数据库
实例说明
Access数据库操作简单,使用方便,是中小型企业经常采用的数据库,但Access数据库容易遭到破坏,并随着时间的增加,数据库文件会变得非常大,该如何解决这些问题呢?本实例通过压缩数据库的方法重新组织修复数据库,减少了数据库占用的空间。运行程序,单击【打开】按钮,找到要修复的数据库,单击【开始修复】按钮,即可完成修复数据库操作。实例运行结果如图16.4所示。

技术要点
实现本实例功能主要用到了JRO命名空间下JetEngineClass对象的CompactDatabase( )方法、System.IO命名空间下File类的Copy( )方法和Delete( )方法。下面分别进行介绍。
(1)CompactDatabase( )方法
CompactDatabase( )方法压缩并回收本地数据库中的浪费空间。
语法格式为:
CompactDatabase(strng SourceConnection, string DestConnection)
参数说明如下。
l SourceConnection:字符串值,指定与要压缩的源数据库的连接。
l DestConnection:字符串值,指定与要通过压缩创建的目标数据库的连接。
注意:必须引用C:\Program Files\Common
Files\System\ado\msjro.dll,该DLL包含JRO命名空间。
(2)Copy( )方法
此方法将现有文件复制到新文件,不允许改写同名的文件。
语法格式为:
public static void Copy (string sourceFileName,string destFileName)
参数说明如下。
l sourceFileName:要复制的文件。
l destFileName:目标文件的名称,不能是一个目录或现有文件。
(3)Delete( )方法
此方法删除指定的文件。
语法格式为:
public static void Delete (string path)
参数说明如下。
l path:要删除的文件的名称。
实现过程
(1)新建一个Windows应用程序,将其命名为Ex16_04,默认窗体为Form1。
(2)在Form1窗体中,主要添加一个TextBox控件,用来显示修复数据库文件的路径;添加一个OpenFileDialog控件,用来选择要修复的数据库文件;添加3个Button控件,用来执行修复、退出和打开数据库文件操作。
(3)主要程序代码。
开始压缩数据库的实现代码如下:
string strPathMdb = null;//数据库路径
private void button2_Click(object sender, EventArgs e)
{
if (!File.Exists(strPathMdb)) //检查数据库是否已存在
{
MessageBox.Show("目标数据库不存在,无法压缩","操作提示");
return;
}
//声明临时数据库的名称
string temp = DateTime.Now.Year.ToString();
temp += DateTime.Now.Month.ToString();
temp += DateTime.Now.Day.ToString();
temp += DateTime.Now.Hour.ToString();
temp += DateTime.Now.Minute.ToString();
temp += DateTime.Now.Second.ToString() + ".bak";
temp = strPathMdb.Substring(0, strPathMdb.LastIndexOf("\\") + 1) + temp;
//定义临时数据库的连接字符串
string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp;
//定义目标数据库的连接字符串
string strPathMdb2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPathMdb;
//创建一个JetEngineClass对象的实例
JRO.JetEngineClass jt = new JRO.JetEngineClass();
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jt.CompactDatabase(strPathMdb2, temp2);
//复制临时数据库到目标数据库(覆盖)
File.Copy(temp, strPathMdb, true);
//最后删除临时数据库
File.Delete(temp);
MessageBox.Show("修复完成");
}
举一反三
根据本实例,读者可以实现以下功能。
定时数据库压缩。
定时数据库备份。
实例467 访问带验证模式的Sqlserver 2000数据库

实例说明
本实例实现了访问带验证模式的SQL Server 2000数据库的功能。用户登录数据库时,必须输入用户名和密码。运行程序,输入计算机的名称或地址、访问数据库的用户名、密码和数据库名称,单击【登录】按钮,即可登录数据库。实例运行结果如图16.5所示。
技术要点
实现本实例功能主要用到了ADO.NET的SqlConnection对象的Open( )方法、Close( )方法和ConnectionState枚举。下面分别进行介绍。
(1)SqlConnection对象
此对象表示SQL Server数据库的一个打开的连接。
语法格式为:
public SqlConnection (string connectionString)
参数说明如下。
l connectionString:用于打开SQL Server数据库的连接。
(2)Open( )方法
此方法使用ConnectionString所指定的属性设置打开的数据库连接。
语法格式为:
public override void Open ()
(3)Close( )方法
此方法关闭与数据库的连接。这是关闭任何打开连接的首选方法。
语法格式为:
public override void Close ()
(4)ConnectionState枚举
此枚举描述与数据源连接的当前状态。
语法格式为:
public enum ConnectionState
ConnectionState枚举值及说明如表16.4所示。
表16.4 ConnectionState枚举值及说明
|
枚 举 值 |
说 明 |
|
Broken |
与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开 |
|
Closed |
连接处于关闭状态 |
|
Connecting |
连接对象正在与数据源连接 |
|
Executing |
连接对象正在执行命令 |
|
Fetching |
连接对象正在检索数据 |
|
Open |
连接处于打开状态 |
注意:使用SqlConnection对象必须引用System.Data.SqlClient命名空间。
实现过程
(1)新建一个Windows应用程序,将其命名为Ex16_05,默认窗体为Form1。
(2)在Form1窗体中,主要添加4个TextBox控件,用于输入登录信息;添加3个Button控件,用来执行登录、断开连接和退出操作。
(3)主要程序代码。
登录数据库的实现代码如下:
public SqlConnection con = null;//实义数据库连接对象
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show(textBox1.Tag.ToString()+"不能为空","提示");
textBox1.Focus();
return;
}
if (textBox2.Text == "")
{
MessageBox.Show(textBox2.Tag.ToString() + "不能为空", "提示");
textBox2.Focus();
return;
}
if (textBox4.Text == "")
{
MessageBox.Show(textBox4.Tag.ToString() + "不能为空", "提示");
textBox4.Focus();
return;
}
try
{
string strcon = "server='" + textBox1.Text.Trim() + "';uid='" + textBox2.Text.Trim() + "';pwd='" + textBox3.Text + "';database='" + textBox4.Text.Trim() + "'";
con = new SqlConnection(strcon);//实例SqlConnect对象
con.Open();
MessageBox.Show("登录成功");
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}
断开连接退出数据库登录的实现代码如下:
private void button2_Click(object sender, EventArgs e)
{
if (con.State == ConnectionState.Open)
{
con.Close();
MessageBox.Show("连接已断开");
}
else
{
MessageBox.Show("还没有连接数据库");
}
}
举一反三
根据本实例,读者可以实现以下功能。
对数据库添加用户。
对数据库添加用户权限。





