没有用过HashTable,看了多篇文章都说类似于一个数组,但看别人用hashtable与数据库的操作结合起来,怎么想都不明白怎么回事,求高人指点一下.
通用类的地址为:http://www.cublog.cn/u1/47121/showart_386156.html
一部分代码如下,
 #region 根据表名及哈稀表自动插入数据库 用法:Insert("test",ht)
   public int Insert(string TableName,Hashtable ht)
   {
    OracleParameter[] Parms=new OracleParameter[ht.Count];
    IDictionaryEnumerator et = ht.GetEnumerator();
    DataTable dt=GetTabType(TableName);
    System.Data.OracleClient.OracleType otype;
    int size=0;
    int i=0;
   
    while ( et.MoveNext() ) // 作哈希表循环
    {
     GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);
     System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString());
     Parms[i]=op; // 添加SqlParameter对象
     i=i+1;
    }
    string str_Sql=GetInsertSqlbyHt(TableName,ht); // 获得插入sql语句
    int val=ExecuteNonQuery(str_Sql,Parms);
    return val;
   }
   #endregion
  
   #region 根据相关条件对数据库进行更新操作 用法:Update("test","Id=:Id",ht); 
   public int Update(string TableName,string ht_Where, Hashtable ht)
   {
    OracleParameter[] Parms=new OracleParameter[ht.Count];
    IDictionaryEnumerator et = ht.GetEnumerator();
    DataTable dt=GetTabType(TableName);
    System.Data.OracleClient.OracleType otype;
    int size=0;
    int i=0;
    // 作哈希表循环
    while ( et.MoveNext() )
    {
     GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);
     System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString());
     Parms[i]=op; // 添加SqlParameter对象
     i=i+1;
    }
    string str_Sql=GetUpdateSqlbyHt(TableName,ht_Where,ht); // 获得插入sql语句
    int val=ExecuteNonQuery(str_Sql,Parms);
    return val;
   }
   #endregion
  
   #region del操作,注意此处条件个数与hash里参数个数应该一致 用法:Del("test","Id=:Id",ht)
   public int Del(string TableName,string ht_Where,Hashtable ht)
   {
    OracleParameter[] Parms=new OracleParameter[ht.Count];
    IDictionaryEnumerator et = ht.GetEnumerator();
    DataTable dt=GetTabType(TableName);
    System.Data.OracleClient.OracleType otype;
    int i=0;
    int size=0;
    // 作哈希表循环
    while ( et.MoveNext() )
    {
     GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);
     System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),et.Value.ToString());
     Parms[i]=op; // 添加SqlParameter对象
     i=i+1;
    }
    string str_Sql=GetDelSqlbyHt(TableName,ht_Where,ht); // 获得删除sql语句
    int val=ExecuteNonQuery(str_Sql,Parms);
    return val;
   }
   #endregion 
   // ===========================================
   // ========上面三个操作的内部调用函数==================
   // =========================================== 
   #region 根据哈稀表及表名自动生成相应insert语句(参数类型的)
   /// <summary>
   /// 根据哈稀表及表名自动生成相应insert语句
   /// </summary>
   /// <param name="TableName">要插入的表名</param>
   /// <param name="ht">哈稀表</param>
   /// <returns>返回sql语句</returns>
   public static string GetInsertSqlbyHt(string TableName,Hashtable ht)
   {
    string str_Sql="";
    int i=0;
    int ht_Count=ht.Count; // 哈希表个数
    IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
    string before="";
    string behide="";
    while ( myEnumerator.MoveNext() )
    {
     if (i==0)
     {
      before="("+myEnumerator.Key;
     }
     else if (i+1==ht_Count)
     {
      before=before+","+myEnumerator.Key+")";
     }
     else
     {
      before=before+","+myEnumerator.Key;
     }
     i=i+1;
    }
    behide=" Values"+before.Replace(",",",:").Replace("(","(:");
    str_Sql="Insert into "+TableName+before+behide;
    return str_Sql;
   }
   #endregion

解决方案 »

  1.   


    关键是我没有思路,怎么把数据处理与Hashtable结合起来?
      

  2.   

    看代码,public int Insert(string TableName,Hashtable ht), public int Del(string TableName,string ht_Where,Hashtable ht)
    它就是把需要的参数先保存到Hashtable中,然后当参数传入方法中,在方法中循环取出hashtable中保存的参数,组装成执行Oracle SQL命令的Oracle参数而已。
      

  3.   

    hashtabe保存参数,遍历获取
    也可使用Dictionary<(TKey, TValue>)>