e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
169 lines
5.9 KiB
C#
169 lines
5.9 KiB
C#
//------------------------------------------------------------------------------
|
|
// <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);
|
|
}
|
|
}
|
|
}
|