phil.o
Не существует простого и универсального решения для ваших требований, и вам нужно будет реализовать что-то для каждого типа базы данных, с которым вы хотите работать.
Хорошим началом может быть создание интерфейса, который определяет метод(Ы), который будет возвращать нужные вам данные. Например:
public interface IDbInformer {
IEnumerable<string> GetTableNames();
}
Затем вам нужно будет создать класс, реализующий интерфейс для каждого типа базы данных, который вам нужен. Например:
public class MsSqlInformer : IDbInformer {
public IEnumerable<string> GetTableNames() {
using (SqlConnection con = new SqlConnection(strConnect)) {
con.Open();
using (SqlCommand com = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", con))
using (SqlDataReader reader = com.ExecuteReader()) {
while (reader.Read()) {
yield return (string)reader["TABLE_NAME"]);
}
}
}
}
}
Обратите внимание, что я не упомянул значения underlyng, которые вам нужно будет включить в свой класс (
strConnect
например). Это до вас, чтобы решить, как вы хотите справиться с ними.
Затем вы можете использовать класс informer для заполнения вашего combobox (или чего-либо еще):
IDbInformer informer = new MsSqlInformer();
myComboBox.Items.Clear();
myComboBox.Items.AddRange(informer.GetTableNames());
Вы можете определить класс ИНФОРМЕРа, реализующий
IDbInformer
интерфейс для каждого типа источника данных, который вы хотите иметь возможность обрабатывать, и использовать их при необходимости. Обеспечение эффективной реализации всех из них намного превосходит цель форума быстрых ответов, поэтому я оставляю вас с необходимыми исследованиями, которые необходимо провести. Я просто предлагаю вам один возможный способ справиться с этим, но я надеюсь, что он все еще будет полезен вам.
Любезно.
Richard Deeming
Для SQL Server может быть проще использовать Метод getschema[^] метод для перечисления таблиц:
using (SqlConnection con = new SqlConnection(strConnect))
{
con.Open();
DataTable tables = con.GetSchema("Tables");
foreach (DataRow row in tables.Rows)
{
yield return string.Format("[{0}].[{1}]", row["TABLE_SCHEMA"], row["TABLE_NAME"]);
}
}
phil.o
Я не знал, что сейчас существует несколько способов получить эти сведения. Никогда не было такого требования, чтобы получить схему базы данных, обычно, когда мне приходится работать с базой данных, я уже знаю ее схему и какие таблицы и столбцы использовать. Я постараюсь засунуть его куда-нибудь в свое сознание ; когда-нибудь он может пригодиться. Спасибо Ричарду за обновление :)