没有用过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
通用类的地址为: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
关键是我没有思路,怎么把数据处理与Hashtable结合起来?
它就是把需要的参数先保存到Hashtable中,然后当参数传入方法中,在方法中循环取出hashtable中保存的参数,组装成执行Oracle SQL命令的Oracle参数而已。
也可使用Dictionary<(TKey, TValue>)>