現在我們要做一個如圖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, "數據庫備份失敗!");
}
}
}
}