Поиск SQL серверов
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Поиск SQL серверов Expand / Collapse
Автор
Сообщение
20.10.2006 9:27
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.11.2006 13:13
Сообщ.: 31, Visits: 84
Подобный вопрос уже был.
Ответы мне не очень понравились, поэтому задаю еще раз но с уточнением, может кто-нибудь сможет помочь...
Мне нужно подключиться к SQL-серверу(это понятно )
Хочется чтобы пользователь мог нажать на кнопочку и ему вываливался список серверов. это я сделал
код C#
SqlDataSourceEnumerator instance =
SqlDataSourceEnumerator.Instance;
DataTable table = instance.GetDataSources();
foreach (DataRow row in table.Rows)
{
if ( row[ "InstanceName" ].ToString() == "" )
serverComboBox.Items.Add( row[ "ServerName" ] );
else
serverComboBox.Items.Add( row[ "ServerName" ]+"\\" + row[ "InstanceName" ] );
}
а дальше в идеале надо, чтобы в соседнем окошечке вываливался список баз данных... и вот тут я попал в тупик...
может знает кто????
Сообщ. #906042
20.10.2006 10:37
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Для получения списка баз данных нужно запросить у пользователя логин и пароль к этому SQL серверу или попытаться подключится к нему используя доверенное соединение. Без входа на сервер список баз получить нельзя.
Сообщ. #906048
20.10.2006 11:00
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.11.2006 13:13
Сообщ.: 31, Visits: 84
ok. Вот я заканектился:
string connectionString = "Provider=SQLOLEDB;server=TEST;User ID=;Password=;Integrated Security=SSPI";
OleDbConnection oleDbConnection = new OleDbConnection( connectionString);
oleDbConnection.Open();
что дальше?
Сообщ. #906054
20.10.2006 11:12
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Вызывай хранимую процедуру sp_helpdb. Она есть в sql2000/2005.
Сообщ. #906056
20.10.2006 11:20
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.11.2006 13:13
Сообщ.: 31, Visits: 84
я честно говоря только-только начинаю писать...
можно поподробней где и как ее вызвать???
OleDbConnection.sp_helpdb
или как?
Сообщ. #906059
20.10.2006 12:49
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Примерно так:

using (SqlConnection sqlConn =  new SqlConnection("Server=TEST;Integrated Security=SSPI"))
{
  sqlConn.Open();
 
  SqlCommand sqlCmd = new SqlCommand();
  sqlCmd.Connection = sqlConn;
  sqlCmd.CommandType = CommandType.StoredProcedure;
  sqlCmd.CommandText = "sp_helpdb";
 
  SqlDataAdapter da = new SqlDataAdapter(cmd);
  DataSet ds = new DataSet();
  da.Fill(ds);
 
  foreach (DataRow row in ds.Tables[0].Rows)
  {
    databaseComboBox.Items.Add(row["name"].ToString());
  }
}

Обрати внимание, что для работы с MSSQL лучше использовать классы из пространства имен System.Data.SqlClient.

Советую также изучить примеры для начинающих работать с ADO.NET

Сообщ. #906067
20.10.2006 12:57
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.11.2006 13:13
Сообщ.: 31, Visits: 84
а без DataAdapter никак нельзя??? GetSchema или что-то подобное?
Сообщ. #906070
20.10.2006 13:14
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Чем тебе DataAdapater не угодил то?

Можно вместо DataAdapter/DataSet использовать SqlDataReader:

using (SqlConnection sqlConn =  new SqlConnection("Server=TEST;Integrated Security=SSPI"))
{
  sqlConn.Open();
  SqlCommand sqlCmd = new SqlCommand();
  sqlCmd.Connection = sqlConn;
  sqlCmd.CommandType = CommandType.StoredProcedure;
  sqlCmd.CommandText = "sp_helpdb";

  using (SqlDataReader sqlDR = sqlCmd.ExecuteReader(CommandBevavior.CloseConnection))
  {
    int col_name = sqlDR.GetOrdinal("name");
    while (sqlDR.Read())
    {
      databaseComboBox.Items.Add(sqlDR.GetString(col_name));
    }
  }
}

Или ты ждешь что в .NET есть готовый метод для получения списка БД? Может он и есть, но я о таком не знаю. Кроме того никто не мешает тебе оформить вышеприведенный код в свою функцию. Имена баз она может возвращать в виде string[].

Сообщ. #906075
09.04.2007 17:27


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 27.03.2008 15:26
Сообщ.: 701, Visits: 7 028
Вот тебе кусок кода:

using SQLDMO;

...................

private void GetSQLServers()

{

  for(int i=0;i<20;i++) { cinfo[i] = new CInfo(); }

  SQLDMO.Application dmo = new SQLDMO.Application();

  SQLDMO.NameList SQLNameList = dmo.ListAvailableSQLServers();

  for(int i=0;i<SQLNameList.Count;i++)

   {

     object srv = SQLNameList.Item( i + 1);

     if(srv != null) { this.cbxServ.Items.Add(srv.ToString()); }

   }

  }

}

Заполняет список доступных SQL серверов в сети. Выдернул из своей проги.