В этой статье я расскажу как можно из .NET-программы получить информацию о существующих базах данных на SQL Server.
Первым делом надо подключиться к интересующему нас экземпляру сервера. Для этого создадим строку подключения. У меня она получилась такая:
Далее определим переменную строкового типа и запишем в нее наш запрос для получения списка всех существующих баз данных на сервере. После чего определим таблицу, в которую будет записан результат запроса.
Первым делом надо подключиться к интересующему нас экземпляру сервера. Для этого создадим строку подключения. У меня она получилась такая:
SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder(); conStr.DataSource = @"SVAT-PC\SQLEXPRESS"; conStr.IntegratedSecurity = true;
Далее определим переменную строкового типа и запишем в нее наш запрос для получения списка всех существующих баз данных на сервере. После чего определим таблицу, в которую будет записан результат запроса.
string query = "SELECT name FROM sys.databases WHERE database_id > 4"; DataTable table = new DataTable("Dbs");
Далее выполним подключение к серверу и выполним наш запрос:
using (SqlConnection con = new SqlConnection(conStr.ToString())) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); adapter.Fill(table); con.Close();
}
Теперь мы можем, пройдясь циклом по нашей таблице с результатом запроса и вытянуть из нее имена всех, существующих баз данных на интересующем нас сервере.
List<string> list = new List<string>(); for (int i = 0; i < table.Rows.Count; i++) { list.Add(table.Rows[i][0].ToString()); }
Весь метод целиком будет выглядеть следующим образом:
/// <summary> /// Получение списка БД. /// </summary> /// <returns>Список БД, хранимых на сервере.</returns> public List<string> GetDbList() { try { SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder(); conStr.DataSource = @"SVAT-PC\SQLEXPRESS"; conStr.IntegratedSecurity = true; string query = "SELECT name FROM sys.databases WHERE database_id > 4"; DataTable table = new DataTable("Dbs"); using (SqlConnection con = new SqlConnection(conStr.ToString())) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); adapter.Fill(table); con.Close(); } List<string> list = new List<string>(); for (int i = 0; i < table.Rows.Count; i++) { list.Add(table.Rows[i][0].ToString()); } return list; } catch (Exception e) { return null; } }
string query = string.Format("USE {0};", DBname); query += "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' and TABLE_NAME != 'sysdiagrams'";
Целиком метод для получения структуры каждой базы данных будет выглядеть следующим образом:
/// <summary> /// Получить структуру БД. /// </summary> /// <param name="DBname">Имя БД</param> /// <returns>Набор таблиц, описывающих БД.</returns> public DataSet GetDBStruct(string DBname) { if (DBname != null && DBname != "") { DataSet respond = new DataSet(DBname); try { SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder(); conStr.DataSource = ServiceName; conStr.InitialCatalog = DBname; conStr.IntegratedSecurity = true; string query = string.Format("USE {0};", DBname); query += "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' and TABLE_NAME != 'sysdiagrams'"; DataTable tables = new DataTable(); using (SqlConnection con = new SqlConnection(conStr.ToString())) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); adapter.Fill(tables); con.Close(); } query = string.Format("USE {0};", DBname); foreach (DataRow row in tables.Rows) { query += string.Format("select TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, DATA_TYPE, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_SET_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '{0}'; ", row["TABLE_NAME"]); } using (SqlConnection con = new SqlConnection(conStr.ToString())) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); adapter.Fill(respond); con.Close(); } return respond; } catch (Exception e) { return null; } } return null; }
Так же есть способ получить информацию о конкретной таблице из интересующей базы данных. Выглядит это так:
/// <summary> /// Получение структуры таблицы. /// </summary> /// <param name="DbName">Имя БД.</param> /// <param name="TableName">Имя таблицы.</param> /// <returns>Структура таблицы.</returns> public DataSet GetTableStruct(string DbName, string TableName) { try { SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder(); conStr.DataSource = @"SVAT-PC\SQLEXPRESS"; conStr.IntegratedSecurity = true; string query = string.Format("USE {0};", DbName); query += string.Format("select TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_SET_NAME, ORDINAL_POSITION from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '{0}'", TableName); DataSet table = new DataSet(DbName + "/" + TableName); using (SqlConnection con = new SqlConnection(conStr.ToString())) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); adapter.Fill(table); con.Close(); } return table; } catch (Exception e) { return null; } }
Комментариев нет:
Отправить комментарий