Welcome to mirror list, hosted at ThFree Co, Russian Federation.

OdbcParameterCollection.cs « Odbc « Data « System « System.Data « referencesource « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 8231d988df4ba2ff8480bd3ee4afa23aa342fcf8 (plain)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
//------------------------------------------------------------------------------
// <copyright file="OdbcParameterCollection.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// <owner current="true" primary="true">[....]</owner>
// <owner current="true" primary="false">[....]</owner>
//------------------------------------------------------------------------------

namespace System.Data.Odbc {

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.Common;
    using System.Data.ProviderBase;
    using System.Diagnostics;
    using System.Runtime.InteropServices;

    [
    Editor("Microsoft.VSDesigner.Data.Design.DBParametersEditor, " + AssemblyRef.MicrosoftVSDesigner, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing),
    ListBindable(false)
    ]
    public sealed partial class OdbcParameterCollection : DbParameterCollection {
        private bool _rebindCollection;   // The collection needs to be (re)bound

        private static Type ItemType = typeof(OdbcParameter);

        internal OdbcParameterCollection() : base() {
        }

        internal bool RebindCollection {
            get { return _rebindCollection; }
            set { _rebindCollection = value; }
        }
        
        [
        Browsable(false),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
        ]
        new public OdbcParameter this[int index] {
            get {
                return (OdbcParameter)GetParameter(index);
            }
            set {
                SetParameter(index, value);
            }
        }

        [
        Browsable(false),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
        ]
        new public OdbcParameter this[string parameterName] {
            get {
                 return (OdbcParameter)GetParameter(parameterName);
            }
            set {
                 SetParameter(parameterName, value);
            }
        }

        public OdbcParameter Add(OdbcParameter value) {
            // MDAC 59206
            Add((object)value);
            return value;
            }

        [ EditorBrowsableAttribute(EditorBrowsableState.Never)]
        [ ObsoleteAttribute("Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value).  http://go.microsoft.com/fwlink/?linkid=14202", false) ] // 79027
        public OdbcParameter Add(string parameterName, object value) {
            // MDAC 59206
            return Add(new OdbcParameter(parameterName, value));
            }

        public OdbcParameter AddWithValue(string parameterName, object value) {
            // MDAC 79027
            return Add(new OdbcParameter(parameterName, value));
            }

        public OdbcParameter Add(string parameterName, OdbcType odbcType) {
            return Add(new OdbcParameter(parameterName, odbcType));
            }

        public OdbcParameter Add(string parameterName, OdbcType odbcType, int size) {
            return Add(new OdbcParameter(parameterName, odbcType, size));
            }

        public OdbcParameter Add(string parameterName, OdbcType odbcType, int size, string sourceColumn) {
            return Add(new OdbcParameter(parameterName, odbcType, size, sourceColumn));
            }

        public void AddRange(OdbcParameter[] values) {
            // V1.2.3300
            AddRange((Array)values);
            }

        // Walks through the collection and binds each parameter
        //
        internal void Bind(OdbcCommand command, CMDWrapper cmdWrapper, CNativeBuffer parameterBuffer){
            for(int i = 0; i < Count; ++i) {
                this[i].Bind(cmdWrapper.StatementHandle, command, checked((short)(i+1)), parameterBuffer, true);
            }
            _rebindCollection = false;
        }

        internal int CalcParameterBufferSize(OdbcCommand command){
            // Calculate the size of the buffer we need
            int parameterBufferSize = 0;
            
            for(int i = 0; i < Count; ++i) {
                if (_rebindCollection) {
                    this[i].HasChanged = true;
                }
                this[i].PrepareForBind(command, (short)(i+1), ref parameterBufferSize);

                parameterBufferSize = (parameterBufferSize + (IntPtr.Size-1)) & ~(IntPtr.Size-1);          // align buffer;
            }
            return parameterBufferSize;
        }

        // Walks through the collection and clears the parameters
        //
        internal void ClearBindings () {
            for(int i = 0; i < Count; ++i) {
                this[i].ClearBinding();
            }
        }

        override public bool Contains(string value) { // WebData 97349
            return (-1 != IndexOf(value));
        }

        public bool Contains(OdbcParameter value) {
            return (-1 != IndexOf(value));
        }

        public void CopyTo(OdbcParameter[] array, int index) {
            CopyTo((Array)array, index);
        }
        
        private void OnChange() {
            _rebindCollection = true;
        }

        internal void GetOutputValues (CMDWrapper cmdWrapper) {
            // mdac 88542 - we will not read out the parameters if the collection has changed
            if (!_rebindCollection) {
                CNativeBuffer parameterBuffer = cmdWrapper._nativeParameterBuffer;
                for(int i = 0; i < Count; ++i) {
                    this[i].GetOutputValue(parameterBuffer);
                }
            }
        }
        
        public int IndexOf(OdbcParameter value) {
            return IndexOf((object)value);
        }
    
        public void Insert(int index, OdbcParameter value) {
            Insert(index, (object)value);
        }
        
        public void Remove(OdbcParameter value) {
            Remove((object)value);
        }
    }
}