Acme.PROJECTNAME.Install.SqlServers.GetDatabaseNames C# (CSharp) Method

GetDatabaseNames() static private method

static private GetDatabaseNames ( string connectString ) : string[]
connectString string
return string[]
		internal static string[] GetDatabaseNames(string connectString)
		{
			ArrayList databaseNames = new ArrayList();
			System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
			SqlDataReader databaseReader = null;
			SqlDataReader existsReader = null;

			try
			{
				conn.ConnectionString = connectString;
				conn.Open();

				SqlCommand cmdDatabases = new SqlCommand();
				cmdDatabases.CommandText = "use master select name from sysdatabases";
				cmdDatabases.CommandType = System.Data.CommandType.Text;
				cmdDatabases.Connection = conn;
				databaseReader = cmdDatabases.ExecuteReader();
				while(databaseReader.Read())
				{
					databaseNames.Add(databaseReader["name"]);
				}
			}
			catch(Exception ex)
			{
				System.Diagnostics.Debug.WriteLine(ex.ToString());
				databaseNames.Clear();
			}
			finally
			{
				if(databaseReader != null)
					databaseReader.Close();
				if(conn != null)
					conn.Close();
			}

			ArrayList itemsToRemove = new ArrayList();
			foreach(string dbName in databaseNames)
			{
				try
				{
					conn.Open();
					SqlCommand cmdUserExist = new SqlCommand();
					cmdUserExist.CommandText = "use " + dbName + " select case when Permissions()&254=254 then 1 else 0 end as hasAccess";
					cmdUserExist.CommandType = System.Data.CommandType.Text;
					cmdUserExist.Connection = conn;
					existsReader = cmdUserExist.ExecuteReader();
					if(existsReader.Read())
					{
						try
						{
							if(int.Parse(existsReader["hasAccess"].ToString()) == 0)
							{
								itemsToRemove.Add(dbName);
							}
						}
						catch(Exception ex)
						{
							System.Diagnostics.Debug.WriteLine(ex.ToString());
						}
					}
				}
				catch(Exception ex)
				{
					System.Diagnostics.Debug.WriteLine(ex.ToString());
					itemsToRemove.Add(dbName);
				}
				finally
				{
					if(existsReader != null)
						existsReader.Close();
					if(conn != null)
						conn.Close();
				}
			}
			foreach(string removedItem in itemsToRemove)
			{
				databaseNames.Remove(removedItem);
			}

			return (string[])databaseNames.ToArray(typeof(string));
		}