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
56
57
58
59
60
namespace HW.Utility.Data
{
    using System;
    using System.Data;
    using System.Data.Common;
 
    public class ParameterCache
    {
        private CachingMechanism cache = new CachingMechanism();
 
        protected virtual void AddParametersFromCache(DbCommand command, Database database)
        {
            IDataParameter[] cachedParameterSet = this.cache.GetCachedParameterSet(database.ConnectionString, command);
            foreach (IDataParameter parameter in cachedParameterSet)
            {
                command.Parameters.Add(parameter);
            }
        }
 
        private bool AlreadyCached(IDbCommand command, Database database)
        {
            return this.cache.IsParameterSetCached(database.ConnectionString, command);
        }
 
        protected internal void Clear()
        {
            this.cache.Clear();
        }
 
        private static IDataParameter[] CreateParameterCopy(DbCommand command)
        {
            IDataParameterCollection parameters = command.Parameters;
            IDataParameter[] array = new IDataParameter[parameters.Count];
            parameters.CopyTo(array, 0);
            return CachingMechanism.CloneParameters(array);
        }
 
        public void SetParameters(DbCommand command, Database database)
        {
            if (command == null)
            {
                throw new ArgumentNullException("command");
            }
            if (database == null)
            {
                throw new ArgumentNullException("database");
            }
            if (this.AlreadyCached(command, database))
            {
                this.AddParametersFromCache(command, database);
            }
            else
            {
                database.DiscoverParameters(command);
                IDataParameter[] parameters = CreateParameterCopy(command);
                this.cache.AddParameterSetToCache(database.ConnectionString, command, parameters);
            }
        }
    }
}