Acme.Northwind.Install.SqlServers.GetServers C# (CSharp) Метод

GetServers() статический приватный Метод

static private GetServers ( ) : string[]
Результат string[]
		internal static string[] GetServers()
		{
			string[] retval = null;

			var txt = string.Empty;
			var henv = IntPtr.Zero;
			var hconn = IntPtr.Zero;
			var inString = new StringBuilder(SQL_DRIVER_STR);
			var outString = new StringBuilder(DEFAULT_RESULT_SIZE);
			var inStringLength = (short)inString.Length;
			var lenNeeded = (short)0;

			try
			{
				if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))
				{
					if (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, 0))
					{
						if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))
						{
							if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,
								DEFAULT_RESULT_SIZE, out lenNeeded))
							{
								if (DEFAULT_RESULT_SIZE < lenNeeded)
								{
									outString.Capacity = lenNeeded;
									if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString,
										lenNeeded, out lenNeeded))
									{
										throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver.");
									}
								}
								txt = outString.ToString();
								int start = txt.IndexOf("{") + 1;
								int len = txt.IndexOf("}") - start;
								if ((start > 0) && (len > 0))
								{
									txt = txt.Substring(start, len);
								}
								else
								{
									txt = string.Empty;
								}
							}
						}
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if (hconn != IntPtr.Zero)
				{
					SQLFreeHandle(SQL_HANDLE_DBC, hconn);
				}
				if (henv != IntPtr.Zero)
				{
					SQLFreeHandle(SQL_HANDLE_ENV, hconn);
				}
			}

			if (txt.Length > 0)
			{
				retval = txt.Split(",".ToCharArray());
			}
			return retval;
		}