jt
2021-06-10 5d0d028456874576560552f5a5c4e8b801786f11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
namespace HW.Utility.Data
{
    using System;
    using System.Collections;
    using System.Data;
 
    internal class CachingMechanism
    {
        private Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
 
        public void AddParameterSetToCache(string connectionString, IDbCommand command, IDataParameter[] parameters)
        {
            string commandText = command.CommandText;
            string str2 = CreateHashKey(connectionString, commandText);
            this.paramCache[str2] = parameters;
        }
 
        public void Clear()
        {
            this.paramCache.Clear();
        }
 
        public static IDataParameter[] CloneParameters(IDataParameter[] originalParameters)
        {
            IDataParameter[] parameterArray = new IDataParameter[originalParameters.Length];
            int index = 0;
            int length = originalParameters.Length;
            while (index < length)
            {
                parameterArray[index] = (IDataParameter) ((ICloneable) originalParameters[index]).Clone();
                index++;
            }
            return parameterArray;
        }
 
        private static string CreateHashKey(string connectionString, string storedProcedure)
        {
            return (connectionString + ":" + storedProcedure);
        }
 
        public IDataParameter[] GetCachedParameterSet(string connectionString, IDbCommand command)
        {
            string commandText = command.CommandText;
            string str2 = CreateHashKey(connectionString, commandText);
            IDataParameter[] originalParameters = (IDataParameter[]) this.paramCache[str2];
            return CloneParameters(originalParameters);
        }
 
        public bool IsParameterSetCached(string connectionString, IDbCommand command)
        {
            string str = CreateHashKey(connectionString, command.CommandText);
            return (this.paramCache[str] != null);
        }
    }
}