C# 数据库连接测试以及备份

现在我们要做一个如图5.1的数据库连接配置,从界面上看有三个功能需要实现:从配置文件中读取数据库连接的相关属性、备份数据库、测试连接。

现在我们就一个一个开始讲解。

   

                                   图5.1

1.从配置文件中读取数据库连接的相关属性

1)  配置文件中的数据库连接:

<configuration>

  <appSettings>

    <!--数据库ip地址-->

    <add key="DBAddress" value="192.168.1.139"/>

    <!--烟点用户名-->

    <add key="UserName" value="sa"/>

    <!--烟点用户密码-->

    <add key="PassWord" value="pw@123456"/>

    <!--烟点数据库名-->

    <add key="DBName" value="2016-12-01 李松"/>

    <!--是否使用加密字符串-->

    <add key="ConStringEncrypt" value="False"/>

  </appSettings>

<configuration>

 

2)  创建一个类,数据库连接类。

       /// <summary>

    /// 数据库连接配置实体

    /// </summary>

    public class CLDBSet

    {

        /// <summary>

        /// 数据库连接地址

        /// </summary>

        public string DBAddress

        {

            get;

            set;

        }

 

        /// <summary>

        /// 数据库名

        /// </summary>

        public string DBName

        {

            get;

            set;

        }

 

        /// <summary>

        /// 用户名

        /// </summary>

        public string UserName

        {

            get;

            set;

        }

 

        /// <summary>

        /// 口令

        /// </summary>

        public string PassWord

        {

            get;

            set;

        }

        /// <summary>

        /// 是否加密

        /// </summary>

        public bool IsEncrypt

        {

            get;

            set;

        }

 

    }

3)  从配置文件中获取相应的数据库连接字符串:

public class PubConstant

{

Private static string configFileName=” System.config”; //System.config配置文件名

       /// <summary>

        /// 得到app.config里配置项的数据库连接字符串。

        /// </summary>

     /// <returns>返回CLDBSet 对象</returns>

       public static CLDBSet GetConnectionString()

        {

          CLDBSet dbset = new CLDBSet();

        //获得配置文件中是否使用加密文件的值

          String conSTringEncrypt=System.Configuration.ConfigurationManager. AppSettings["ConStringEncrypt"];  

       if (ConStringEncrypt.ToLower() == "true")

            {

                dbset.IsEncrypt = true;

            }

            else

            {

                dbset.IsEncrypt = false;

           }

//获得配置文件中的数据库地址

dbset.DBAddress = System.Configuration.ConfigurationManager.AppSettings["DBAddress"];

//获得配置文件中的数据库名

dbset.DBName = System.Configuration.ConfigurationManager.AppSettings["DBName"]; 

//获得配置文件中的密码

dbset.PassWord = System.Configuration.ConfigurationManager.AppSettings["PassWord"];  

//获得配置文件中的口令(密码)

dbset.UserName = System.Configuration.ConfigurationManager.AppSettings["UserName"];

return dbset;

}

}

4)  在UI界面中显示出当前配置文件中连接的数据库

        /// <summary>

        /// 当窗体加载时就显示

        /// </summary>

       /// <param name="sender"></param>

   /// <param name="e"></param>

        private void FSJKPZ_Load(object sender, EventArgs e)

        {

          PubConstant  pubConstant=New  PubConstant ();

           Var dbSet= pubConstant. GetConnectionString();

//数据库连接地址

            txtAddress.Text = dbSet.DBAddress;

           //用户名

            txtUserName.Text = dbSet.UserName;

           //口令(密码)

            txtPassWord.Text = dbSet.PassWord;

            //数据库名

            txtSJK.Text = dbSet.DBName;

  }

 

从配置文件中获取当前数据库连接已经算是完成了。

2.测试连接

测试连接数据库这一块  可以根据输入的服务器地址、用户名、密码、数据库名进行测试连接。

1)  先创建一个DBTester类,DBTester类主要写数据库测试连接的方法

  public class DBTester

{

   /// <summary>

        /// 测试界面输入的数据库连接

        /// </summary>

        /// <param name="dbSet">数据库连接信息</param>

        /// <returns></returns>

        public object[] TextDBUI(CLDBSet dbSet)

        {

            bool state = false;

            string msg = string.Empty;

            object[] o = new object[] { };

 

            SqlConnection con = new SqlConnection(string.Format("database={0};user={1};pwd={2};server={3};Connect Timeout=5", dbSet.DBName, dbSet.UserName, dbSet.PassWord, dbSet.DBAddress));

            try

            {

                con.Open();

                if (con.State == System.Data.ConnectionState.Open)

                {

                    state = true;

                }

            }

            catch (SqlException se)

            {

                o = new object[] { se.Message, se.Source, se.ErrorCode };

                state = false;

            }

            finally

            {

                con.Close();

            }

 

            if (state)

            {

                return null;

            }

            else

            {

                return o;

            }

        }

}

 

2)注册点击测试连接按钮事件

  /// <summary>

        /// 注册点击测试连接按钮事件

        /// </summary>

        /// <param name="sender"></param>

    /// <param name="e"></param>

Public void btnTest_Click(object sender, EventArgs e)

        {

            if (txtAddress.Text.Trim().Equals(""))

            {

                this.ShowMessageBox(eDialogType.Forbidden, "请输入服务器地址!");

                txtAddress.Focus();//为控件设置输入焦点

                return;

            }

            if (txtSJK.Text.Trim().Equals(""))

            {

                this.ShowMessageBox(eDialogType.Forbidden, "请输入数据库名!");

                txtSJK.Focus();//为控件设置输入焦点

                return;

            }

            if (txtUserName.Text.Trim().Equals(""))

            {

                this.ShowMessageBox(eDialogType.Forbidden, "请输入用户名!");

                txtUserName.Focus();//为控件设置输入焦点

                return;

            }

 

            CLDBSet dbSet = new CLDBSet();

            dbSet.DBAddress = txtAddress.Text.Trim();

            dbSet.DBName = txtSJK.Text.Trim();

            dbSet.UserName = txtUserName.Text.Trim();

            dbSet.PassWord = txtPassWord.Text.Trim();

 

            DBTester tester = new DBTester();

 

            object[] result = tester.TextDBUI(dbSet);

 

            if (result == null)

            {

                this.ShowMessageBox(eDialogType.Success, null, "数据库连接测试成功!");

            }

            else

            {

                string s = string.Empty;

                s = @"数据库连接测试失败!\r\n

请检查配置的正确性以及网络的正常!

" + s;

                this.ShowMessageBox(eDialogType.Exception, null, s);

            }

        }

 

3.备份数据库

1) 写一个方法备份数据库的方法

       /// <summary>

        /// 数据库备份

        /// </summary>

        /// <param name="dbName">数据库名称</param>

        /// <param name="bakPath">备份文件路径+名称</param>

        /// <returns></returns>

        public bool BackupDatabase(string dbName, string bakPath)

        {

            try

            {

                string bakSql = string.Format(@"use master

backup database {0} to disk='{1}'", dbName, bakPath);

             SqlHelper.ExecuteNonQuery(bakSql, null);

            // 注:SqlHelper是一个数据库的帮助类

            }

            catch

            {

                return false;

            }

            return true;

        }

1)  注册备份数据库按钮点击事件

  private void btnBackup_Click(object sender, EventArgs e)

        {

        //获得配置文件中的数据库连接

          PubConstant pubConstant=New PubConstant();

          Var dbset=  pubConstant. GetConnectionString(); //从配置文件中获得的数据库连接

   string dbName = dbSet.DBName; //获得数据库名

string bakPath = "";

       SaveFileDialog saveFileDialog1 = new SaveFileDialog();

       saveFileDialog1.Filter = "BAK文件|*.bak";//类型是备份文件

      saveFileDialog1.FileName = dbName+DateTime.Now.ToString("yyyyMMddHHmmss") + ".bak"; //备份后的文件名 数据库名+当前时间

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

            {

 

                bakPath = saveFileDialog1.FileName;

 

                if (BackupDatabase(dbName, bakPath))

                {

                    this.ShowMessageBox(eDialogType.Success, "数据库备份成功!");

                }

                else

                {

                    this.ShowMessageBox(eDialogType.Exception, "数据库备份失败!");

                }

            }

        }

  }   

 

posted @ 2017-01-11 16:27  姚小丹  阅读(3312)  评论(0编辑  收藏  举报