public void ReleaseConnection (OciGlue connection) 
		{
			lock (list) {
				list.Add (connection);
				Monitor.Pulse (list);
			}
		}
		public virtual OciGlue CreateConnection (OracleConnectionInfo info) 
		{
			OciGlue oci;
			oci = new OciGlue ();
			oci.CreateConnection (info);
			return oci;
		}
        public static OciErrorInfo HandleError(OciHandle hwnd, int status)
        {
            OciErrorInfo info;

            info.ErrorCode    = status;
            info.ErrorMessage = OciGlue.ReturnCodeToString(status);

            if (status == OciGlue.OCI_ERROR || status == OciGlue.OCI_SUCCESS_WITH_INFO)
            {
                OciHandle h = hwnd;
                if (h == null)
                {
                    throw new Exception("Internal driver error: handle is null.");
                }

                ulong   errbufSize  = 4096;
                UIntPtr errbufSizep = new UIntPtr(errbufSize);
                IntPtr  errbuf      = OciCalls.AllocateClear((int)errbufSize);

                OciCalls.OCIErrorGet(hwnd,
                                     1,
                                     IntPtr.Zero,
                                     out info.ErrorCode,
                                     errbuf,
                                     (uint)errbufSize,
                                     OciHandleType.Error);

                byte[] bytea = new byte[errbufSize];
                Marshal.Copy(errbuf, bytea, 0, (int)errbufSize);
                errbufSize = 0;

                // first call to OCICharSetToUnicode gets the size
                OciCalls.OCICharSetToUnicode(h, null, bytea, ref errbufSizep);
                errbufSize = errbufSizep.ToUInt64();
                StringBuilder str = new StringBuilder((int)errbufSize);

                // second call to OCICharSetToUnicode gets the string
                OciCalls.OCICharSetToUnicode(h, str, bytea, ref errbufSizep);

                string errmsg = String.Empty;
                if (errbufSize > 0)
                {
                    errmsg            = str.ToString();
                    info.ErrorMessage = String.Copy(errmsg);
                }
                Marshal.FreeHGlobal(errbuf);
            }
            return(info);
        }
示例#4
0
		void Open ()
		{
			if (State == ConnectionState.Open)
				return;

			PersistSecurityInfo ();

			if (!pooling || conInfo.SetNewPassword == true) {
				oci = new OciGlue ();
				oci.CreateConnection (conInfo);
			} else {
				pool = pools.GetConnectionPool (conInfo, minPoolSize, maxPoolSize);
				oci = pool.GetConnection ();
			}
			state = ConnectionState.Open;

			CreateStateChange (ConnectionState.Closed, ConnectionState.Open);
		}
示例#5
0
		protected override void Dispose (bool disposing)
		{
			if (!disposed) {
				if (State == ConnectionState.Open)
					Close ();
				dataReader = null;
				transaction = null;
				oci = null;
				pool = null;
				conInfo.Username = string.Empty;
				conInfo.Database = string.Empty;
				conInfo.Password = string.Empty;
				connectionString = null;
				parsedConnectionString = null;
				base.Dispose (disposing);
				disposed = true;
			}
		}