厚积薄发,丰富的公用类库积累,助你高效进行系统开发(3)----数据库相关操作...

在前面随笔《厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)》和《厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)》,介绍了公用类库的包含的内容以及相关使用说明,本文将继续把在整理帮助文档成CHM过程中,完成的类库使用说明逐步放送,一是使得大家对类库的功能及使用有一个大致的了解,并能够在实际中应用,或者能够和大家在这方面继续探讨,逐步改进和完善。

1、 Access数据库文件操作辅助类JetAccessUtil

实现效果 

1)本辅助类主要是用来方便实现Access数据库文件操作,包括新建Access数据库(可含密码)、压缩数据库、设置数据库密码、列出数据库表、列出数据库表字段等常用的Access数据库文件操作的实现。 

 

实现代码

1)辅助类库JetAccessUtil的相关方法定义 

 /// <summary>    
///
 新建带密码的空Access 2000 数据库    
///   </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="mdbFilePath"> 数据库文件路径 </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 2000 数据库的表名称    
///   </summary>     
///   <param name="mdbFilePath"> 数据库文件路径 </param>     
///   <param name="password"> 数据库密码 </param>     
///   <returns></returns>     
public   static  List < string >  ListTables( string  mdbFilePath,  string  password)    
   
///   <summary>     
///  列出Access2000数据库的表字段    
///   </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());  


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

 实现效果

1)本辅助类主要是用来方便实现对Access数据库文件的Sql访问,包括测试连接、执行Sql、获取返回数据集等操作。  

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

 

实现代码 

1)辅助类OleDbHelper提供的函数列表如下所示。 

///   <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));    
    }   
}    


3、根据各种不同数据库生成不同分页语句的辅助类 PagerHelper 

实现效果

1)本辅助类主要是用来方便根据各种条件,生成不同的分页语句,且支持Oracle、SqlServer、Access、MySql数据库分页语句的生成。 

2)辅助类可以根据表名、查询字段列表、排序字段、分页数量、分页页码、降序升序、查询条件等条件组合成一条完整的分页语句,并且支持获取数量和列表两种语句接口,非常方便用于数据的分页处理。 

 

 

实现代码:

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;        
}  

 

4、 查询条件组合辅助类 SearchCondition

实现效果 

1)本辅助类主要是用来方便实现对查询表单的各种条件进行组合,快速拼接Sql语句的操作,类库可用于Web项目和Winform项目的查询列表拼接语句。 
2)使用场景: 在查询列表页面中,一般有好几个条件, 用户进行查询时候,需要根据这几个条件进行过滤查询.但在组装这些过滤条件的时候,代码比较烦琐臃肿,本组件代码为解决该问题而设计。

3)使用目的: 1.减少对参数非空的条件判断 2. 支持SqlServer、Oracle、Access、MySql数据访问的Sql语句的生成,根据不同数据库的一些特点差异,生成对应的语句. 3. 减少拼接语句的代码并减少出错的几率 4.构造Sql语句或者参数化条件更加易读。

4) SearchCondition辅助类的类图如下所示,其中SearchCondtion是语句操作对象类,SearchInfo是语句的条件实体类,SqlOperator是各种查询条件的枚举对象,方便操作并减少输入字符条件的出错。

 

实现代码 

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() );    
          }    
      }   
..............(很多类似的代码)

 

 

 

5、转换IDataReader字段对象的格式辅助类 SmartDataReader 

实现效果

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>     
///  将DataReader的属性值转化为实体类的属性值,返回实体类    
///   </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)辅助类SmartDataReader提供了各种类型的数据转换函数,如Int32、Int16、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;   
}  

  

6、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文件情况。

 

再次感谢大家的支持和鼓励。 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WHC.OrderWater.Commons 伍华聪 公共类源码 价值680元 ----------Database-------------- 1.DataTable帮类(DataTableHelper.cs) 2.Access数据库文件操作类(JetAccessUtil.cs) 5.查询条件组合辅类(SearchCondition.cs) 6.查询信息实体类(SearchInfo.cs) 8.Sql命令操作函数(可用于安装程序的时候数据库脚本执行)(SqlScriptHelper.cs) ----------Device-------------- 声音播放辅类(AudioHelper.cs) 摄像头操作类,包括开启、关闭、抓图、设置等功能(Camera.cs) 提供用于操作【剪切板】的方法(ClipboardHelper.cs) 获取电脑信息(Computer.cs) 提供用户硬件唯一信息的辅类(FingerprintHelper.cs) 读取指定盘符的硬盘序列号(HardwareInfoHelper.cs) 提供访问键盘当前状态的属性(KeyboardHelper.cs) 全局键盘钩子。这可以用来在全球范围内捕捉键盘输入。(KeyboardHook.cs) 模拟鼠标点击(MouseHelper.cs) 全局鼠标钩子。这可以用来在全球范围内捕获鼠标输入。(MouseHook.cs) MP3文件播放操作类(MP3Helper.cs) 关联文件(ExtensionAttachUtil.cs) 注册文件关联的辅类(FileAssociationsHelper.cs) 打开、保存文件对话框操作类(FileDialogHelper.cs) 常用的文件操作类FileUtil(FileUtil.cs) INI文件操作类(INIFileUtil.cs) 独立存储操作类(IsolatedStorageHelper.cs) 序列号操作类(Serializer.cs) 获取一个对象,它提供用于访问经常引用的目录的属性。(SpecialDirectories.cs) 简单的Word操作对象(WordCombineUtil.cs) 这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) XML操作类(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。(ArgumentValidation.cs) 这个类提供了实用方法的字节数组和图像之间的转换。(ByteImageConvertor.cs) byte字节数组操作类(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的类(ConvertHelper.cs) CRC校验辅类(CRCUtils.cs) 枚举操作公共类(EnumHelper.cs) 身份证操作类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅类(RMBUtil.cs) 常用的字符串常量(StringConstants.cs) 简要说明TextHelper。(StringUtil.cs) 获取中文字首字拼写,随机发生器,按指定概率随机执行操作(Util.cs) 各种输入格式验证辅类(ValidateUtil.cs) ----------Network-------------- Cookie操作类(CookieManger.cs) FTP操作类(FTPHelper.cs) HTML操作类(HttpHelper.cs) 网页抓取帮(HttpWebRequestHelper.cs) Net(NetworkUtil.cs) IE代理设置辅类(ProxyHelper.cs) ----------Winform-------------- 跨线程的控件安全访问方式(CallCtrlWithThreadSafety.cs) CheckBoxList(CheckBoxListUtil.cs) 窗口管理类(ChildWinManagement.cs) ChildWinManagement 由马丁·米勒http://msdn.microsoft.com/en-us/library/ms996492.aspx提供一个简单的方法打印工作的一个RichTextBox一个帮手(ExRichTextBoxPrintHelper.cs) 显示,隐藏或关闭动画形式。(FormAnimator.cs) 对窗体进行冻结、解冻操作类(FreezeWindowUtil.cs) 窗体全屏操作类(FullScreenHelper.cs) GDI操作类(GDI.cs) 提供静态方法来读取这两个文件夹和文件的系统图标。(IconReaderHelper.cs) 图片对象比较、缩放、缩略图、水印、压缩、转换、编码等操作类(ImageHelper.cs) 输入法帮,全角 转换为半角(ImeHelper.cs) Winform提示框 的摘要说明。(MessageUtil.cs) 包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅类(NotifyIconHelper.cs) 打印机类(POSPrinter.cs) 图片、光标、图标、位图等资源操作类(ResourceHelper.cs) RTF字符格式辅类(RTFUtility.cs) 串口开发类(SerialPortUtil.cs) 设置文本属性提供一个ToolStripStatusLabel(SafeToolStripLabel.cs) 只运行一个实例及系统自动启动辅类(StartupHelper.cs) Web页面预览效果图片抓取辅类(WebPageCapture.cs) 供Asp.Net直接调用的包装类(WebPreview.cs) 计算机重启、关电源、注销、关闭显示器辅类(WindowsExitHelper.cs) 简单写了点,还有很多,希望能对大家有帮 ================================================================================================ 本资料共包含以下附件: WHC.OrderWater.Commons.rar 公共类文档.docx
引用中提到,当JS在页面渲染之前执行代码时,可能会获取不到页面元素,导致报错。在你提到的错误中,"Uncaught TypeError: Cannot read properties of null (reading 'disabled')",意味着在index.js文件的第一行尝试读取一个值为null的元素的属性'disabled'。这通常是由于在获取该元素之前执行了相关代码,导致元素尚未加载或无法找到。 为了解决这个问题,你可以将代码放在获取元素之后执行,确保元素已经加载完毕。可以参考中的示例代码,先获取元素,然后再执行相应的操作。 例如,你可以按照以下步骤进行处理: 1. 确定代码中报错的行数是第一行(index.js:1)。 2. 找到该行代码尝试读取'disabled'属性的元素。 3. 将该行代码移动到获取该元素之后的位置。 4. 重新加载页面,查看是否解决了报错问题。 通过将代码放置在获取元素之后执行,可以避免该类型的错误。这样可以确保元素已经加载完毕,才能对其进行操作,从而避免报错。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JQuery报错Uncaught TypeError: Illegal invocation的处理方法](https://download.csdn.net/download/weixin_38666230/13034647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [简析 JavaScript报错 Uncaught TypeError Cannot read properties of null (reading ‘...‘) at new](https://blog.csdn.net/m0_67392182/article/details/123398174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [js中控制台报错:Uncaught TypeError: Cannot read properties of undefined (reading ‘appendChild‘)](https://blog.csdn.net/qq_56715703/article/details/128009637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值