首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

16.2  Access数据库安全

由于Access数据库操作简单,使用方便,所以一些中小型的应用软件经常采用Access数据库。为了保证数据库的安全,经常要加密或锁定数据库,如果数据库由于某种原因遭到破坏,就需要对数据库进行修复。下面的几个实例分别实现了加密、锁定和修复Access数据库的功能。

实例466 如何编程修复Access数据库

实例说明

Access数据库操作简单,使用方便,是中小型企业经常采用的数据库,但Access数据库容易遭到破坏,并随着时间的增加,数据库文件会变得非常大,该如何解决这些问题呢?本实例通过压缩数据库的方法重新组织修复数据库,减少了数据库占用的空间。运行程序,单击【打开】按钮,找到要修复的数据库,单击【开始修复】按钮,即可完成修复数据库操作。实例运行结果如图16.4所示。

文本框:  
图16.4  修复Access数据库
技术要点

实现本实例功能主要用到了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数据库

文本框:  
图16.5  访问带验证模式的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("还没有连接数据库");

            }

        }

举一反三

根据本实例,读者可以实现以下功能。

*  对数据库添加用户。

*  对数据库添加用户权限。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论