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, "数据库备份失败!");

                }

            }

        }

  }   

 

转载于:https://www.cnblogs.com/yaoxiaodan/p/6274191.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux程序选择boy糊者girl,linux脚本程序练习-Go语言中文社区

1、编写一个名为iffile程序&#xff0c;它执行时判断/bin目录下date文件是否存在&#xff1f;2、编写一个名为greet的问候程序&#xff0c;执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨&#xff0c;中午到下午六点为下午&#xff0c;下午六点到半夜为晚…

什么是初效过滤器_初效过滤器怎么样 初效过滤器特点介绍【详解】

说起过滤器&#xff0c;我们大家都不陌生。现在环境污染严重&#xff0c;我们大多数家庭都在使用 净水器 、 空气净化器 等家电设备&#xff0c;它们需要依靠过滤器来净化水质和空气&#xff0c;让我们的生活更加健康。不过&#xff0c;您知道初效过滤器安装的步骤是什么吗?下…

云计算hcie贴吧_专业介绍|计算机网络技术

点击蓝字关注我们01专业特色计算机网络技术专业所有在职专任教师都具有高级职称和硕士学位&#xff0c;双师比例为75&#xff05;&#xff1b;在企业核心岗位工作的兼职老师4人。筹备组建华为ICT学院。华为ICT学院是华为公司主导的&#xff0c;面向全球在校大学生传递华为ICT技…

linux日志自动按天保存,linux实现按天生成日志文件并自动清理

linux实现按天生成日志文件并自动清理前篇文章中讲到如何在Linux crontab创建每秒执行的方法&#xff0c;高人可能早意识到日志文件没做处理&#xff0c;假如没人工处理久了日后越来越大肯定会出现问题&#xff0c;当然人工处理也不现实。为了解决这个问题&#xff0c;所以有了…

通达信版弘历软件指标_中线公式指标(副图 通达信 贴图)明确文字提示,辅助判断中线走势下载_通达信公式...

中线公式指标(副图 通达信 贴图)明确文字提示&#xff0c;辅助判断中线走势下载详细说明第一股票公式网()告诉您&#xff1a;当前正要下载&#xff1a;中线公式指标(副图 通达信 贴图)明确文字提示&#xff0c;辅助判断中线走势下载 中线公式指标(副图 通达信 贴图)明确文字提示…

新巴巴运动网 项目第十一天

新巴巴运动网 项目第十一天 今天内容 购物车 创建购物车对象 加入购物车分析开发流程 加入购物车代码开发 同款商品合并(非登陆时、已登陆时) 去购物车结算分析开发流程 去购物车结算代码开发 创建购物车对象 购物项 Sku 是否有货 数量 购物车 List<购物项> 结果集 小计…

eclipse 插件教程_编写Eclipse插件教程–第1部分

eclipse 插件教程Eclipse是三个最受欢迎的Java开发IDE之一。 其成功的原因之一是其可扩展性。 对于任何知道该怎么做并且已经做到的人来说&#xff0c;编写eclipse插件都可以非常轻松快捷。 不幸的是&#xff0c;第一次在Eclipse中进行操作会非常耗时且令人沮丧。 Eclipse框架非…

mac cad石材填充图案_CAD电视背景墙画法步骤

在做室内装修设计的时候&#xff0c;电视背景墙往往是我们需要考虑的重点。1、打开平面布置图。2、复制一份&#xff0c;主要复制电视墙区域。3、矩形选框框选电视墙区域。4、删除选框意外的线条。5、旋转90度&#xff0c;让我们正对电视墙。6、在下方画基准线&#xff0c;作为…

运行时间_运行一段时间报高压保护

请点击蓝字“阿理支持连”关注哦一起来探索空调的技术Discovery ●运行一段时间报高压保护某地区用户报修一台柜机运行一段时间(20分钟)后报E1高压保护&#xff0c;到底怎么回事呢&#xff1f;让我们一起来探讨一下吧&#xff01;一、案例描述这是一套定频柜机&#xff0c;E1高…

CodeForces 757B Bash's Big Day(线性筛)

题意&#xff1a;给你一个集合&#xff0c;让你找到一个最大的子集&#xff0c;使得子集里面的元素的gcd&#xff01;1&#xff0c;输出子集的元素的个数。 思路&#xff1a;先将集合里面的元素哈希&#xff0c;再线性筛。 PS&#xff1a;明明以前做过类似的题的&#xff0c;结…

c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联

摩路由M1作为Moto旗下首款路由器&#xff0c;自去年发布以来&#xff0c;备受瞩目。几个月下来&#xff0c;借着强大的信号覆盖和穿墙能力&#xff0c;赢得了不少用户的认可&#xff0c;甚至推崇。不久前发布的摩路由M2&#xff0c;在M1的基础上进行了升级&#xff0c;功能和配…

如何让代码更易于维护_易于使用的单位和集成代码

如何让代码更易于维护此示例说明如何使用Maven和Sonar为单元和集成测试生成覆盖率。 它使用非常简单的技术&#xff0c;只需10-15分钟即可在任何现有的Maven构建中运行。 它可以用于单元&#xff0c;集成&#xff0c;ATDD或任何其他类型的测试套件。 覆盖率结果显示在声纳中。 …

android的md动画,Android-notes/动画体系详解.md at master · drs0214/Android-notes · GitHub

Android 动画详解&#xff1a;属性动画、View 动画和帧动画在 Android 中&#xff0c;基本的动画共有三种类型&#xff1a;View 动画&#xff1a;也叫视图动画或者补间动画&#xff0c;主要是指 android.view.animation 包下面的一些类&#xff0c;只能被用来设置给 View&#…

android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

Android 5.0新特性有哪些&#xff1f;经过一段时间曝光与测试后&#xff0c;期待已久的Android L系统正式发布了&#xff0c;新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖)。Android 5.0新特性有哪些呢&#xff1f;下面&#xff0c;由百事网小编盘大家盘点一下安卓5.0…

cks子,间谍,局部Mo子和短管

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

8数据提供什么掩膜产品_工业轨式1-8路RS485数据(MODBUS RTU协议)厂家产品说明...

产品描述工业级数点对点光猫提供1-8路RS485&#xff08;MODBUS RTU协议&#xff09;&#xff1b;在光纤中传输&#xff0c;该产品突破了传统串行接口通讯距离与通讯速率的矛盾&#xff0c;同时&#xff0c;也解决了电磁干扰、地环干扰和雷电破坏的难题&#xff0c;大大提高了数…

BZOJ 4568 倍增维护线性基

在树的路径上选取一些点 使得这些点权xor后的结果最大 思路&#xff1a; 时限60s 59696ms卡过去了哈哈哈 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int N20005; ll T…

代码android点击效果,GitHub - likaiyuan559/TouchEffects: Android View点击特效TouchEffects,几行代码为所有控件添加点击效果...

Android 点击特效TouchEffectsTouchEffects能够帮助你更快速方便的增加点击时候的效果&#xff0c;TouchEffects的目标是打造一个稳定、全面、且能更方便的自定义及个性化的一款点击效果框架。功能特点&#xff1a;只需要几行代码便能为全局的View加上点击效果支持多种点击效果…

Linux下暴力破解工具Hydra详解

Linux下暴力破解工具Hydra详解 一、简介 Number one of the biggest security holes are passwords, as every password security study shows. Hydra is a parallized login cracker which supports numerous protocols to attack. New modules are easy to add, beside that,…

android的json解析方式,Android解析JSON方式

JSON数据格式的定义&#xff1a;JSON的全称是&#xff1a;JavaScript Object Notation&#xff0c;是一种轻量级的数据交换格式。它构建于两种结构&#xff1a;1、"名称/值" 对的集合(a collection of name / value pairs)。不同的语言中&#xff0c;它被理解为对象(…