internal void Bind(OciStatementHandle statementHandle, NativeBuffer_RowBuffer buffer, OciErrorHandle errorHandle, int rowBufferLength) { OciDefineHandle defnp = null; int num3; OCI.MODE mode = OCI.MODE.OCI_DEFAULT; OCI.DATATYPE ociType = this._metaType.OciType; this._rowBuffer = buffer; if (this._metaType.IsLong) { mode = OCI.MODE.OCI_DATA_AT_EXEC; num3 = 0x7fffffff; } else { num3 = this._byteSize; } IntPtr zero = IntPtr.Zero; IntPtr rlenp = IntPtr.Zero; IntPtr dataPtr = this._rowBuffer.DangerousGetDataPtr(this._valueOffset); if (-1 != this._indicatorOffset) { zero = this._rowBuffer.DangerousGetDataPtr(this._indicatorOffset); } if ((-1 != this._lengthOffset) && !this._metaType.IsLong) { rlenp = this._rowBuffer.DangerousGetDataPtr(this._lengthOffset); } try { IntPtr ptr3; int rc = TracedNativeMethods.OCIDefineByPos(statementHandle, out ptr3, errorHandle, ((uint)this._ordinal) + 1, dataPtr, num3, ociType, zero, rlenp, IntPtr.Zero, mode); if (rc != 0) { this._connection.CheckError(errorHandle, rc); } defnp = new OciDefineHandle(statementHandle, ptr3); if (rowBufferLength != 0) { uint pvskip = (uint)rowBufferLength; uint indskip = (-1 != this._indicatorOffset) ? pvskip : 0; uint rlskip = ((-1 != this._lengthOffset) && !this._metaType.IsLong) ? pvskip : 0; rc = TracedNativeMethods.OCIDefineArrayOfStruct(defnp, errorHandle, pvskip, indskip, rlskip, 0); if (rc != 0) { this._connection.CheckError(errorHandle, rc); } } if (this._metaType.UsesNationalCharacterSet) { defnp.SetAttribute(OCI.ATTR.OCI_ATTR_CHARSET_FORM, 2, errorHandle); } if (!this._connection.UnicodeEnabled && this._bindAsUTF16) { defnp.SetAttribute(OCI.ATTR.OCI_ATTR_CHARSET_ID, 0x3e8, errorHandle); } if (this._metaType.IsLong) { this._rowBuffer.WriteIntPtr(this._valueOffset, IntPtr.Zero); this._callback = new OCI.Callback.OCICallbackDefine(this._callback_GetColumnPiecewise); rc = TracedNativeMethods.OCIDefineDynamic(defnp, errorHandle, IntPtr.Zero, this._callback); if (rc != 0) { this._connection.CheckError(errorHandle, rc); } } } finally { NativeBuffer.SafeDispose(ref this._longBuffer); OciHandle.SafeDispose(ref defnp); } }