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));
}