Member 13462531 Ответов: 1

Как отобразить имя и содержимое таблицы базы данных, если строка подключения конкретной базы данных была предоставлена любого рода, как SQL, mysql или excel в приложении C# windows.


ДАННЫЙ КОД ПРЕДНАЗНАЧЕН ТОЛЬКО ДЛЯ SQL . Но я хочу, чтобы COMMAN для всех глобальных источников данных(любого типа, как мой sql или excel)

Что я уже пробовал:

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())
                    {
                        myComboBox.Items.Clear();
                        while (reader.Read())
                        {
                            myComboBox.Items.Add((string)reader["TABLE_NAME"]);
                        }
                    }
                }

GKP1992

Если вы знаете строку подключения, вы знаете поставщика БД. Вы можете сделать запрос на основе этой информации.

1 Ответов

Рейтинг:
1

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

Я не знал, что сейчас существует несколько способов получить эти сведения. Никогда не было такого требования, чтобы получить схему базы данных, обычно, когда мне приходится работать с базой данных, я уже знаю ее схему и какие таблицы и столбцы использовать. Я постараюсь засунуть его куда-нибудь в свое сознание ; когда-нибудь он может пригодиться. Спасибо Ричарду за обновление :)