ADO.Net: получить определение таблицы из таблиц SQL-сервера - PullRequest
6 голосов
/ 19 января 2009

Я использую C # для написания метода, который возвращает следующую информацию о таблице: имена столбцов, типы столбцов, размеры столбцов, внешние ключи.

Может ли кто-нибудь указать мне правильное направление, как это сделать?

Ответы [ 5 ]

8 голосов
/ 19 января 2009

Это действительно зависит от того, как вы общаетесь со своей базой данных. Если вы используете LinqToSQL или другой подобный ORM, это будет довольно легко, но если вы хотите получить эти значения с помощью запроса, я бы посоветовал вам использовать представления INFORMATION_SCHEMA, поскольку они быстрые и простые для запроса.

, например

select * from information_schema.columns where table_name = 'mytable'
4 голосов
/ 19 января 2009

Для получения FK и схемы вы должны использовать:

DA.FillSchema() 

DS.Table("Name").PrimaryKey 

ИЛИ вызов sp_fkey с использованием метода, показанного ниже

Фрагмент кода из И Другая ссылка

    private void LoanSchema()
    {

         private List<String> tablesList = new List<String>();
         private Dictionary<String, String> columnsDictionary = new Dictionary<String, String>();

          string connectionString = "Integrated Security=SSPI;" +
          "Persist Security Info = False;Initial Catalog=Northwind;" +
          "Data Source = localhost";
          SqlConnection connection = new SqlConnection();
          connection.ConnectionString = connectionString;
          connection.Open();

          SqlCommand command = new SqlCommand();
          command.Connection = connection;
          command.CommandText = "exec sp_tables";
          command.CommandType = CommandType.Text;

          SqlDataReader reader = command.ExecuteReader();

           if (reader.HasRows)
           {
               while (reader.Read())
                  tablesList.Add(reader["TABLE_NAME"].ToString());
           }
           reader.Close();

           command.CommandText = "exec sp_columns @table_name = '" +
           tablesList[0] + "'";
           command.CommandType = CommandType.Text;
           reader = command.ExecuteReader();

            if (reader.HasRows)
            {
                while (reader.Read())
                          columnsDictionary.Add(reader["COLUMN_NAME"].ToString(), reader["TYPE_NAME"].ToString());
             }
}
1 голос
/ 13 марта 2010

Если вы используете MS SQL Server, вам определенно следует взглянуть на пространство имен SMO (объекты управления сервером).

Существуют объекты, которые Вы можете использовать в .net, отвечающие за все виды вещей в базе данных (включая, но не ограничиваясь таблицами, столбцами, ограничениями и т. Д.)

1 голос
/ 19 января 2009

Вы можете использовать метод SqlDataAdapter.FillSchema ().

Или же вы можете использовать метод SqlDataAdapter.Fill () после установки для свойства MissingSchemaAction объекта SqlDataAdapter значения AddWithKey. Но если вам нужна только схема, вы должны убедиться, что ваш запрос не возвращает строк. Это можно сделать, добавив к вашему запросу оператор типа WHERE 1 = 2.

0 голосов
/ 19 января 2009

Я думаю, вам нужен класс System.Data.DataTable:
http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...