在前方随笔《蓄势待发,丰盛的公用类库积累,助你急迅开始展览系统开发(1)》和《蓄势待发,丰裕的公用类库积累,助你快捷开始展览系统开发(2)》,介绍了公用类库的含有的始末以及相关应用说明,本文将继续把在整治协助文书档案成CHM进程中,达成的类库使用验证稳步放送,一是驱动大家对类库的成效及运用有五个大体的垂询,并能够在实际中选择,恐怕能够和大家在那方面接轨探索,稳步更始和完美。

壹 、 Access数据库文件操作帮忙类JetAccessUtil

贯彻效益 

1)本支持类首要是用来方便完成Access数据库文件操作,包涵新建Access数据库(可含密码)、压缩数据库、设置数据库密码、列出多少库表、列出数据库表字段等常用的Access数据库文件操作的贯彻。 

 

兑现代码

1)辅助类库JetAccessUtil的连带措施定义 

 /// <summary>    
/// 新建带密码的空Access 两千 数据库    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <param name=”password”>数据库密码</param>    
/// <returns>字符0为操作成功,不然为失利极度新闻。</returns>    
public static string CreateMDB(string mdbFilePath, string password)    
   
/// <summary>    
/// 新建空的Access数据库    
/// </summary>    
/// <param name=”mdbFile帕特h”>数据库文件路径</param>    
/// <returns>字符0为操作成功,不然为破产至极音讯。</returns>    
public static string CreateMDB(string mdbFilePath)    
   
/// <summary>    
/// 压缩带密码Access数据库    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <param name=”password”>数据库密码</param>    
/// <returns>字符0为操作成功,不然为失利非凡消息。</returns>    
public static string CompactMDB(string mdbFilePath, string password)    
   
/// <summary>    
/// 压缩没有带密码Access数据库    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <returns>字符0为操作成功,不然为破产极度音讯。</returns>    
public static string CompactMDB(string mdbFilePath)    
   
/// <summary>    
/// 设置Access数据库的拜会密码    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <param name=”oldPwd”>旧密码</param>    
/// <param name=”newPwd”>新密码</param>    
/// <returns>字符0为操作成功,不然为退步极度音讯。</returns>    
public static string SetMDBPassword(string mdbFilePath, string oldPwd, string newPwd)    
   
/// <summary>    
/// 列出Access 两千 数据库的表名称    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <param name=”password”>数据库密码</param>    
/// <returns></returns>    
public static List<string> ListTables(string mdbFilePath, string password)    
   
/// <summary>    
/// 列出Access三千数据库的表字段    
/// </summary>    
/// <param name=”mdbFilePath”>数据库文件路径</param>    
/// <param name=”password”>数据库密码</param>    
/// <param name=”tableName”>表名称</param>    
/// <returns>再次来到字段名称和呼应项目标字典数据</returns>    
public static Dictionary<string, string> ListColumns(string mdbFilePath, string password, string tableName) 

 

2)帮助类库的接纳例子。 

string fileNoPass = Path.Combine(Path.GetTempPath(), “EmptyNoPass.mdb”);    
string filePass = Path.Combine(Path.GetTempPath(), “EmptyWithPass.mdb”);    
   
//创设不带密码的空数据库    
JetAccessUtil.CreateMDB(fileNoPass);    
//成立带密码的空数据库    
JetAccessUtil.CreateMDB(filePass, “wuhuacong@163.com”);    
   
//压缩不带密码的数据库    
JetAccessUtil.CompactMDB(fileNoPass);    
//压缩带密码的数据库    
JetAccessUtil.CompactMDB(filePass, “wuhuacong@163.com”);    
   
//重新设置数据库的密码    
JetAccessUtil.SetMDBPassword(filePass, “wuhuacong@163.com”, “6966254”);    
//列出数据库的表名称    
List<string> tableNameList = JetAccessUtil.ListTables(filePass, “6966254”);    
string strNameList = “”;    
foreach (string name in tableNameList)    
{    
    strNameList += string.Format(“,{0}”, name);    
}    
if (!string.IsNullOrEmpty(strNameList))    
{    
    MessageUtil.ShowTips(strNameList);    
}    
  

Process.Start(Path.GetTempPath());  

 二 、常用的Access数据库Sql操作辅助类库 OleDbHelper

 实现效益

1)本协助类首假若用来便于达成对Access数据库文件的Sql访问,包括测试连接、执行Sql、获取重回数据集等操作。  

2)帮助类库构造对象的时候,只要求传入Access数据库文件,即可对其进展相关的Sql操作,简化对Access数据库执行脚本的操作。

 

兑现代码 

1)帮忙类奥莱DbHelper提供的函数列表如下所示。 

/// <summary>    
/// 常用的Access数据库Sql操作支持类库    
/// </summary>    
public class OleDbHelper    
{    
    /// <summary>    
    /// 构造函数    
    /// </summary>    
    /// <param name=”accessFilePath”></param>    
    public OleDbHelper(string accessFilePath)    
   
    /// <summary>    
    /// 测试数据库是或不是正规连接    
    /// </summary>    
    /// <returns></returns>    
    public bool TestConnection()    
   
    /// <summary>    
    /// 执行Sql,并赶回成功的数量    
    /// </summary>    
    /// <param name=”sqlList”>待执行的Sql列表</param>    
    /// <returns></returns>    
    public int ExecuteNonQuery(List<string> sqlList)    
   
    /// <summary>    
    /// 执行无再次回到值的口舌,成功重临True,不然False    
    /// </summary>    
    /// <param name=”sql”>待执行的Sql</param>    
    /// <returns></returns>    
    public bool ExecuteNoQuery(string sql)    
   
    /// <summary>    
    /// 执行单重返值的语句    
    /// </summary>    
    /// <param name=”sql”>待执行的Sql</param>    
    /// <returns></returns>    
    public object ExecuteScalar(string sql)    
   
    /// <summary>    
    /// 执行Sql,并返回IDataReader对象。    
    /// </summary>    
    /// <param name=”sql”>待执行的Sql</param>    
    /// <returns></returns>    
    public IDataReader ExecuteReader(string sql)    
   
    /// <summary>    
    /// 执行Sql并返回DataSet集合    
    /// </summary>    
    /// <param name=”sql”>待执行的Sql</param>    
    /// <returns></returns>    
    public DataSet ExecuteDataSet(string sql)    
}
     

 

2)完结操作例子如下所示。 

string access = @”C:\Orderwater.mdb”;    
List<string> tableNameList = JetAccessUtil.ListTables(access, “”);    
OleDbHelper helper = new OleDbHelper(access);    
   
foreach(string tableName in tableNameList)    
{    
    string sql = string.Format(“Select * from {0} “, tableName);    
    DataSet ds = helper.ExecuteDataSet(sql);    
    if (ds.Tables[0].Rows.Count > 0)    
    {    
        MessageUtil.ShowTips(string.Format(“tableName:{0} RowCount:{1}”, tableName, ds.Tables[0].Rows.Count));    
    }   
}
   

③ 、依据各样不一致数据库生成区别分页语句的帮忙类 PagerHelper 

兑现效益

1)本援救类主若是用来便宜依照各样口径,生成差其他分页语句,且扶助Oracle、SqlServer、Access、MySql数据库分页语句的生成。 

2)扶助类能够依照表名、查询字段列表、排序字段、分页数量、分页页码、降序升序、查询条件等原则组合成一条完整的分页语句,并且支持获取数据和列表三种语句接口,格外有益用于数据的分页处理。 

图片 1 

 

落到实处代码:

1)使用例子表达。通过组织PageHelper类,并传播表名、查询字段、排序字段、页面大小、当前页码、降序升序、查询条件等参数,能够生成基于Oracle、SqlServer、Access、MySql数据库的分页语句。然后经超过实际际查询总数语句、查询列表语句能够完结获取钦赐数量列表的显得,由于分页是基于一页一页的拿走,那样升高了数量分页的频率。   
      

 /// <summary>
/// 通过祥和组装分页语句        
/// </summary>        
/// <param name=”where”></param>        
/// <param name=”pagerInfo”></param>        
/// <returns></returns>        
private DataTable DirectLoadData(string where, PagerInfo pagerInfo)        
{        
    DataTable dt = null;        
    PagerHelper helper = new PagerHelper(“All_Customer”, “*”, “ID”, pagerInfo.PageSize, pagerInfo.CurrenetPageIndex, true, where);        
    string countSql = helper.GetPagingSql(DatabaseType.SqlServer, true);        
    string dataSql = helper.GetPagingSql(DatabaseType.SqlServer, false);        
       
    string value = SqlValueList(countSql);        
    pagerInfo.RecordCount = Convert.ToInt32(value);        
       
    dt = SqlTable(dataSql);        
       
    return dt;        
}  

 

肆 、 查询条件构成支持类 SearchCondition

金玉满堂效益 

1)本扶助类重假使用来方便达成对查询表单的各样规格举行结合,火速拼接Sql语句的操作,类库可用于Web项目和Winform项指标询问列表拼接语句。 

2)使用情状: 在询问列表页面中,一般有一些个原则,
用户进行查询时候,须要基于那多少个尺码进行过滤查询.但在组装那些过滤条件的时候,代码相比繁琐臃肿,本组件代码为缓解该问题而设计。

3)使用目标: 1.减去对参数非空的标准判断 2.
扶助SqlServer、Oracle、Access、MySql数据访问的Sql语句的变动,依照分裂数据库的局地风味差别,生成对应的语句.

  1. 削减拼接语句的代码并压缩失误的概率4.构造Sql语句或许参数化条件更为易读。

4)
SearchCondition帮忙类的类图如下所示,在那之中SearchCondtion是言辞操作对象类,SearchInfo是语句的标准实体类,SqlOperator是各类查询条件的枚举对象,方便操作并缩减输入字符条件的失误。

图片 2 

落实代码 

1)生成Sql语句

如有多少个字段,供给依照不一样的字段进行过滤,想生成的SQL语句如下:

Where (1=1) AND AA2 Like ‘%AA2Value%’ AND AA6 >= ‘Value6’ AND AA7
<= ‘value7’ AND AA3 = ‘Value3’ AND AA4 < ‘Value4’ AND AA5 >
‘Value5’ AND AA <> ‘1’

2)与一般做法的相比较。上边大家相比较一下行使该控件和不选择在列表查询页面中的代码,可以看来使用了控件后的代码大大较少了,并且可读性也坚实了

private string GetCondition()    
{    
    SearchCondition search = new SearchCondition();    
    search.AddCondition(“GroupID”, this.ddlUserGroup.SelectedValue, SqlOperator.Equal, true)//班组ID    
          .AddCondition(“DealGroupName”, this.ddlDealGroup.SelectedValue, SqlOperator.Equal, true)/*消缺单位*/   
          .AddCondition(“VisioStationID”, this.ddlStation.SelectedValue, SqlOperator.Like, true)//变电站    
          .AddCondition(“VisioImageID”, this.ddlLine.SelectedValue, SqlOperator.Like, true)/*馈线*/   
          .AddCondition(“BugNo”, this.txtBugNo.Text.Trim(), SqlOperator.Like, true)/*编号*/   
          .AddCondition(“Finder”, this.ddlFindUser.SelectedValue, SqlOperator.Like, true)/*发现人*/   
          .AddCondition(“CheckUser”, this.ddlCheckUser.SelectedValue, SqlOperator.Like, true)//验收人    
          .AddCondition(“DeviceBug.BugType”, this.ddlBugType.SelectedValue, SqlOperator.Equal, true)//缺陷体系    
          .AddCondition(“CurrentState”, this.ddlCurrentState.SelectedValue, SqlOperator.Equal, true)//处理状态    
          .AddCondition(“FindDate”, this.txtFindBeginDate.Text.Trim(), SqlOperator.MoreThanOrEqual, true)//发现日期    
          .AddCondition(“FindDate”, this.txtFindEndDate.Text.Trim(), SqlOperator.LessThanOrEqual, true)//发现日期    
          .AddCondition(“EndDate”, this.txtEndBeginDate.Text.Trim(), SqlOperator.MoreThanOrEqual, true)//消缺日期    
          .AddCondition(“EndDate”, this.txtEndEndDate.Text.Trim(), SqlOperator.LessThanOrEqual, true);//消缺日期    
   
    return search.BuildConditionSql(DatabaseType.SqlServer);    

}
   

常见做法,不应用控件在结构列表查询的话语的函数代码则相比繁琐复杂,如下所示。

private string GetCondition()    
  {    
      string condition = “”;    
      if ( this.ddlUserGroup.SelectedValue != “0”)    
      {    
          condition += string.Format( ” GroupID = {0}” , this.ddlUserGroup.SelectedValue.ToString() );    
      }    
   
      //消缺单位    
      if ( this.ddlDealGroup.SelectedValue != “0”)    
      {    
          if (condition == “”)    
          {    
              condition += string.Format( ” DealGroupName = ‘{0}'” , this.ddlDealGroup.SelectedItem.Text );    
          }    
          else   
          {    
              condition += string.Format( ” And DealGroupName = ‘{0}'” , this.ddlDealGroup.SelectedItem.Text );    
          }    
      }    
   
          
      if (this.txtStation.Text.Trim() != “”)    
      {    
          if (condition == “”)    
          {    
              condition += string.Format(” Station like ‘%{0}%'”,this.txtStation.Text.Trim() );    
          }    
          else   
          {    
              condition += string.Format(” And Station like ‘%{0}%’ “,this.txtStation.Text.Trim() );    
          }    
      }   
…………..(很多接近的代码)

 

 

 

⑤ 、转换IDataReader字段对象的格式帮助类 斯马特DataReader 

达成效益

1)本辅助类首假使用来便于转换IDataReader字段对象的格式协理类,能够变换有暗中认可值、可空类型的字段数据。 

2)在利用数据库重临对象IDataReader的时候,大家必要看清数据库字段是不是为可空类型,并给予空字段暗中同意值,或许更换为可空类型数据,使用该协助类,可以简化繁琐的数据库字段转换操作,是数据库字段转换必备的扶持类。  

 

兑现代码

1)协理类SmartDataReader的转移数据格式的操作例子如下。 

      /// <summary>    
      /// 通用获取集合对象方法    
      /// </summary>    
      /// <param name=”sql”>查询的Sql语句</param>    
      /// <param name=”paramList”>参数列表,假若没有则为null</param>    
      /// <returns></returns>    
      private List<T> GetList(string sql, IDbDataParameter[] paramList)    
      {    
          T entity = null;    
          List<T> list = new List<T>();    
   
          Database db = DatabaseFactory.CreateDatabase();    
          DbCommand command = db.GetSqlStringCommand(sql);    
          if (paramList != null)    
          {    
              command.Parameters.AddRange(paramList);    
          }    
   
          using (IDataReader dr = db.ExecuteReader(command))    
          {    
              while (dr.Read())    
              {    
                  entity = DataReaderToEntity(dr);    
   
                  list.Add(entity);    
              }    
          }    
          return list;    
      }    
   
/// <summary>    
/// 将Data里德r的属性值转化为实体类的属性值,重返实体类    
/// </summary>    
/// <param name=”dr”>有效的DataReader对象</param>    
/// <returns>实体类对象</returns>    
protected ItemDetailInfo DataReaderToEntity(IDataReader dataReader)    
{    
    ItemDetailInfo itemDetailInfo = new ItemDetailInfo();    
    SmartDataReader reader = new SmartDataReader(dataReader);    
        
    itemDetailInfo.ID = reader.GetInt32(“ID”);    
    itemDetailInfo.ItemNo = reader.GetString(“ItemNo”);    
    itemDetailInfo.ItemName = reader.GetString(“ItemName”);    
    itemDetailInfo.Manufacture = reader.GetString(“Manufacture”);    
    itemDetailInfo.MapNo = reader.GetString(“MapNo”);    
    itemDetailInfo.Specification = reader.GetString(“Specification”);    
    itemDetailInfo.Material = reader.GetString(“Material”);    
    itemDetailInfo.ItemBigType = reader.GetString(“ItemBigType”);    
    itemDetailInfo.ItemType = reader.GetString(“ItemType”);    
    itemDetailInfo.Unit = reader.GetString(“Unit”);    
    itemDetailInfo.Price = reader.GetDecimal(“Price”);    
    itemDetailInfo.Source = reader.GetString(“Source”);    
    itemDetailInfo.StoragePos = reader.GetString(“StoragePos”);    
    itemDetailInfo.UsagePos = reader.GetString(“UsagePos”);    
    itemDetailInfo.Note = reader.GetString(“Note”);    
    itemDetailInfo.WareHouse = reader.GetString(“WareHouse”);    
    itemDetailInfo.Dept = reader.GetString(“Dept”);    
        
    return itemDetailInfo;    

  

2)协助类斯马特DataReader提供了各个类型的数据转换函数,如Int3二 、Int1陆 、Decimal、Float、DateTime等数据类型的格式转换,各种格式提供了二种艺术的拍卖,如对Int类型的数码转换,其卷入的函数达成如下所示。 

/// <summary>    
/// 转换为Int类型数据    
/// </summary>    
public int GetInt32(string column)    
{    
    return GetInt32(column, 0);    
}    
   
/// <summary>    
/// 转换为Int类型数据    
/// </summary>    
public int GetInt32(string column, int defaultIfNull)    
{    
    int data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (int)defaultIfNull : int.Parse(reader[column].ToString());    
    return data;    
}    
   
/// <summary>    
/// 转换为Int类型数据    
/// </summary>    
public int? GetInt32Nullable(string column)    
{    
    int? data = (reader.IsDBNull(reader.GetOrdinal(column))) ? (int?)null : int.Parse(reader[column].ToString());    
    return data;   
}  

  

六 、OSql命令操作函数帮助类 SqlScriptHelper 

福寿绵绵效益

1)本帮衬类首假若OSql命令操作函数(可用于安装程序的时候数据库脚本执行)。 

2)本协助类库日常用在SqlServer数据库脚本执行,附加、分离、备份、复苏数据库等操作。  

 

金镶玉裹福禄双全代码

1)主要的类库函数如下所示。 

/// <summary>    
/// 本地执行SQL脚本    
/// </summary>    
/// <param name=”path”>脚本文件路径全名</param>    
public static void DoSQL(string path)    
   
/// <summary>    
/// 执行SQL脚本    
/// </summary>    
/// <param name=”path”>脚本文件路径全名</param>    
/// <param name=”userID”>数据库登录ID</param>    
/// <param name=”password”>数据库登录密码</param>    
/// <param name=”server”>数据库服务器地址</param>    
public static void DoSQL(string path, string userID, string password, string server)    
   
/// <summary>    
/// 后台执行DOS文件    
/// </summary>    
/// <param name=”fileName”>文件名(包蕴路径)</param>    
/// <param name=”argument”>运行参数</param>    
/// <param name=”hidden”>是或不是隐伏窗口</param>    
public static void RunDos(string fileName, string argument, bool hidden)    
   
/// <summary>    
/// 在运维脚本在此之前把脚本中的数据库名称替换到安装界面输入的数据库名称    
/// </summary>    
/// <param name=”filePath”>脚本文件名</param>    
/// <param name=”oldDBName”>原有的数据库名称</param>    
/// <param name=”newDBName”>新的数据库名称</param>    
public static void ReplaceDBName(string filePath, string oldDBName, string newDBName)    
   
/// <summary>    
/// 附加SqlServer数据库    
/// </summary>    
public bool AttachDB(string connectionString, string dataBaseName, string dataBase_MDF, string dataBase_LDF)    
   
/// <summary>    
/// 分离SqlServer数据库    
/// </summary>    
public bool DetachDB(string connectionString, string dataBaseName)    
   
/// <summary>    
/// 还原数据库    
/// </summary>    
public bool RestoreDataBase(string connectionString, string dataBaseName, string DataBaseOfBackupPath, string DataBaseOfBackupName)    
   
/// <summary>    
/// 备份SqlServer数据库    
/// </summary>    

public bool BackupDataBase(string connectionString, string dataBaseName, string DataBaseOfBackupPath, string DataBaseOfBackupName)   

2)安装执行数据库脚本的操作例子如下所示。 

string sqlFilePath = physicalRoot + “Hotel.sql”;    
 SqlScriptHelper.ReplaceDBName(sqlFilePath, “Hotel_Database”, EdnmsDb.Database);    
   
 if (!string.IsNullOrEmpty(EdnmsDb.UserId) && !string.IsNullOrEmpty(EdnmsDb.Password))    
 {    
     SqlScriptHelper.DoSQL(sqlFilePath, EdnmsDb.UserId, EdnmsDb.Password, EdnmsDb.Server);    
 }    
 else   
 {    
     SqlScriptHelper.DoSQL(sqlFilePath, EdnmsDb.Server);    
 }  

新式公用类库DLL+XML注释文件下载地址是:

http://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar

 

根据时间和字数考虑,下次持续介绍相关的类库使用,别的提一下,整个连串的CHM文书档案也在一齐整理中,我们来探望最近进程的完结的CHM文件情状。

图片 3 

重新多谢大家的支撑和鞭策。 

CHM帮助文书档案持续更新中,统一下载地址是:
http://www.iqidi.com/download/commonshelp.rar 

相关文章

网站地图xml地图