using System;
using System.Collections;
using System.Text;
using System.Security.Cryptography;
using System.IO;
/// <summary>
/// 数据库操作类与Xml文档操作(保存/读取Connectionstring)
/// </summary>
class DBOperation
{
/// <summary>
/// 配置文件结构
/// </summary>
public struct ConfigStruct
{
/// <summary>
/// 数据库服务器主机地址
/// </summary>
public string hostAddress ;
/// <summary>
/// 用户名
/// </summary>
public string userName ;
/// <summary>
/// 密码
/// </summary>
public string password ;
/// <summary>
/// 数据库名
/// </summary>
public string DBName ;
}
/// <summary>
/// 类构造函数
/// </summary>
public DBOperation()
{
//
}
#region 定义用于写XML文档的字段名的变量
private string str_HA = "hostAddress";
private string str_UN = "userName";
private string str_PWD = "password";
private string str_DBN = "DBName";
#endregion
#region 读写Xml文档
/// <summary>
/// 读XML文档
/// </summary>
/// <param name="name">要取的配置文件中的指定数据源的名字,如:旧系统 "oldsystem" </param>
public ConfigStruct readXML(string name)
{
try
{
//定义新的结构变量
ConfigStruct cfg = new ConfigStruct();
//定义一个新的dataset
System.Data.DataSet ds = new System.Data.DataSet();
//判断文件是否存在,不存在提示错误并返回一个空的结构对象
if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory +"config.xml"))
{
//如果存在则读取config.xml文件的数据
ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory +"config.xml");
}
else
{
// System.Windows.Forms.MessageBox.Show("config.xml文件不存在!" , "警告",
// System.Windows.Forms.MessageBoxButtons.OK ,
// System.Windows.Forms.MessageBoxIcon.Warning);
return new ConfigStruct();
}
//判断表是否存在,不存在提示错误并返回一个空的结构对象
if (ds.Tables.IndexOf(name.ToUpper())== -1 )
{
// System.Windows.Forms.MessageBox.Show("在config.xml中不能找到相关的数据源的配置信息!" , "警告",
// System.Windows.Forms.MessageBoxButtons.OK ,
// System.Windows.Forms.MessageBoxIcon.Warning);
return new ConfigStruct();
}
SymmetricMethod sm = new SymmetricMethod();
//存在则取其值
cfg.hostAddress = sm.Decrypto(ds.Tables[name.ToUpper()].Select("key='" + sm.Encrypto(str_HA) + "'")[0]["value"].ToString());
cfg.userName = sm.Decrypto(ds.Tables[name.ToUpper()].Select("key='" + sm.Encrypto(str_UN) + "'")[0]["value"].ToString());
cfg.password = sm.Decrypto(ds.Tables[name.ToUpper()].Select("key='" + sm.Encrypto(str_PWD) + "'")[0]["value"].ToString());
cfg.DBName = sm.Decrypto(ds.Tables[name.ToUpper()].Select("key='" + sm.Encrypto(str_DBN) + "'")[0]["value"].ToString());
ds.Dispose();
return cfg;
}
catch//(Exception exp)
{
//System.Windows.Forms.MessageBox.Show(exp.Message);
return new ConfigStruct();
}
}
/// <summary>
/// 写XML文档
/// </summary>
/// <param name="name">数据源的名称</param>
/// <param name="hostAddress">主机地址值</param>
/// <param name="DBName">数据库名称</param>
/// <param name="UserName">用户名</param>
/// <param name="password">密码</param>
/// <param name="con_str">数据库的数据源信息</param>
public Boolean writeXML(string name , string hostAddress ,string DBName ,
string UserName ,string password)
{
try
{
//定义一个dataset
System.Data.DataSet ds = new System.Data.DataSet("config");
//判断是否存在config.xml文件,如果存在从该文件中读取内容到dataset
if(System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory +"config.xml"))
{
ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory +"config.xml");
}
//判断是否存在该表,如果存在则删除该表
if(ds.Tables.IndexOf(name.ToUpper()) != -1 )
{
ds.Tables.Remove(name.ToUpper());
}
//定义一个datatable
System.Data.DataTable dt = new System.Data.DataTable(name.ToUpper());
//为新定义的表增加列
dt.Columns.Add("key");
dt.Columns.Add("value");
SymmetricMethod sm = new SymmetricMethod();
//增加记录表新定义的表中
dt.Rows.Add(new object[2]{ sm.Encrypto( str_HA ) , sm.Encrypto( hostAddress)});
dt.Rows.Add(new object[2]{ sm.Encrypto( str_UN ) , sm.Encrypto( UserName)});
dt.Rows.Add(new object[2]{ sm.Encrypto( str_PWD) , sm.Encrypto( password)});
dt.Rows.Add(new object[2]{ sm.Encrypto( str_DBN) , sm.Encrypto( DBName)});
//将表增加到定义的新的dataset中
ds.Tables.Add(dt