如下程序:
/// Retrieve cached parameters
/// </summary>
/// <param name="cacheKey">key used to lookup parameters</param>
/// <returns>Cached SqlParamters array</returns>
public static SqlParameter[] GetCachedParameters(string cacheKey) {
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

if (cachedParms == null)
return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length]; for (int i = 0, j = cachedParms.Length; i < j; i++)
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone(); return clonedParms;
}
调用方法为SqlParameter[] parms = SQLHelper.GetCachedParameters(SQL_SELECT_ADDRESS);
其中private const string SQL_SELECT_ADDRESS = "SELECT Account.FirstName, Account.LastName, Account.Addr1, Account.Addr2, Account.City, Account.State, Account.Zip, Account.Country, Account.Phone FROM Account WHERE Account.UserId = @UserId";SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];这句是什么意思?干什么用的?
这段程序一直没看懂,谁能给解释一下啊?

解决方案 »

  1.   

    需要使用参数的时候先判断容器中是否存在,
    如果Hashtable中没有参数实例就返回null;
    如果参数类实例数组存在Hashtable中,就取出来,通过Clone复制一份。供SqlCommand使用。
      

  2.   

    不好意思,可能我没说清楚,这段代码的大概意思我明白.不明白的就是
    SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];这句是什么意思?干什么用的?   
    cacheKey是string型的,parmCache[cacheKey]这样写是什么意思?
    其中parmCache 的定义如下
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());parmCache[cacheKey]好象能存下一个参数数组.string类型的变量可以作为Hashtable 对象数组的下标吗?
      

  3.   

    Hashtable(哈希表)可以用string类型的变量作为索引.
    parmCache[cacheKey]表示在parmCache存的名为cachekey的对象.