private void FillDatabases(object o) { if (!(o is CnData)) { return; } CnData cnData = (CnData)o; SqlConnection cn = null; try { if (cnData.UseSql) { cn = AccountForm.CreateConnection(cnData.Server, cnData.User, cnData.Password, "master"); } else { cn = AccountForm.CreateConnection(cnData.Server, "master"); } if (cn.State != ConnectionState.Open) { cn.Open(); } try { SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "SELECT name FROM sysdatabases(NOLOCK) ORDER BY name"; List <string> dbList = new List <string>(); var rdr = cmd.ExecuteReader(); try { while (rdr.Read()) { dbList.Add(rdr[0].ToString()); } } finally { rdr.Close(); } foreach (string str in dbList) { try { if (cnData.CheckDB) { cmd.Connection.ChangeDatabase(str); cmd.CommandText = "SELECT COUNT(*) FROM sysobjects(NOLOCK) WHERE name='CompetitionData' AND type='U'"; object oTmp = cmd.ExecuteScalar(); if (oTmp == null || oTmp == DBNull.Value) { continue; } if (Convert.ToInt32(oTmp) < 1) { continue; } cmd.CommandText = @"SELECT COUNT(*) FROM syscolumns c(NOLOCK) JOIN sysobjects obj(NOLOCK) ON obj.id = c.id WHERE obj.name = 'CompetitionData' AND obj.type = 'U' AND c.name = 'DB_ID'"; oTmp = cmd.ExecuteScalar(); if (oTmp == null || oTmp == DBNull.Value) { continue; } if (Convert.ToInt32(oTmp) < 1) { continue; } cmd.CommandText = "SELECT DB_ID FROM CompetitionData(NOLOCK)"; oTmp = cmd.ExecuteScalar(); if (oTmp == null || oTmp == DBNull.Value || oTmp.ToString() != AccountForm.DB_ID) { continue; } } if (cbDatabase.Dispatcher.CheckAccess()) { ComboBoxItem item = new ComboBoxItem(); item.Content = str; cbDatabase.Items.Add(item); } else { cbDatabase.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ParameterizedThreadStart) delegate(object obj) { if (!(obj is string)) { return; } ComboBoxItem it = new ComboBoxItem(); it.BeginInit(); it.Content = obj as string; it.EndInit(); cbDatabase.Items.Add(it); }, str); } } catch { } } } finally { cn.Close(); } } catch (Exception ex) { if (this.Dispatcher.CheckAccess()) { MessageBox.Show(this, "Ошибка загрузки списка баз данных:\r\n" + ex.Message, "Ошибка загрузки"); } else { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate { MessageBox.Show(this, "Ошибка загрузки списка баз данных:\r\n" + ex.Message, "Ошибка загрузки"); }); } } }