Получение информации о схеме таблицы с использованием C # - PullRequest
1 голос
/ 24 ноября 2011

Я хочу получить информацию о схеме таблицы, используя C #.

Я использовал запрос sp_help <table_name>, чтобы получить его, который хорошо работает, когда я выполняю его в окне запроса, но не могу получить его из C #. Я хочу получить всю информацию о таблицах, которая необходима для сопоставления между двумя таблицами, такими как имя, тип данных, размер, isprimary, ключ и т. Д.

Я записал следующий код

SqlCommand cmd = sourceCon.CreateCommand();
cmd.CommandText = string.Format("sp_help '{0}'", cmbSourceTable.SelectedItem.ToString()); //cmd.CommandType = CommandType.StoredProcedure; 
sourceDataTable = new DataTable(); 
SqlDataReader dr = cmd.ExecuteReader(); 
sourceDataTable.Load(dr);
dr.Close(); 

Возвращает только информацию о таблице, которая при создании или нет

Ответы [ 8 ]

3 голосов
/ 24 ноября 2011

Вместо использования sp_help, вы можете попробовать следующие опции:

1) использовать представление INFORMATION_SCHEMA.COLUMNS:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable'

2) запрос sys.columns

SELECT c.*, t.name
FROM sys.columns c
    JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID('YourTable')

Это всего лишь 2 параметра, которые будут возвращать один набор результатов. INFORMATION_SCHEMA.COLUMNS не сообщает вам (например, является ли столбец столбцом IDENTITY), в отличие от маршрута sys.columns. Больше информации вы можете получить из представлений каталога, зависит только от того, что вам еще нужно. Вот ссылка MSDN .

2 голосов
/ 24 ноября 2011

Возможно, вам будет проще играть с представлениями INFORMATION_SCHEMA - вы можете создавать запросы, которые будут извлекать большую часть данных, относящихся к структуре и взаимосвязи между таблицами в схеме базы данных SQL Server.

Смотрите здесь: http://msdn.microsoft.com/en-us/library/ms186778.aspx

1 голос
/ 21 января 2012

Также вы можете использовать метод GetSchema из SqlConnection.http://msdn.microsoft.com/en-us/library/ms136367.aspx

примерно так:

var tableSchema = con.GetSchema(SqlClientMetaDataCollectionNames.Tables, new string[] { null, null, "[tableName]" });

Массив строк является «фильтром», здесь вы можете найти столбцы, по которым можно фильтровать: http://msdn.microsoft.com/en-us/library/ms254969.aspx

Для других серверов баз данных и дополнительной информации: http://msdn.microsoft.com/en-us/library/kcax58fh.aspx

1 голос
/ 15 декабря 2011

У меня есть простой способ получить схему таблицы. Просто создайте соединение с любым провайдером, таким как объект SqlConnection. Создайте объект команды для запроса выбора (выберите только первую 1 запись, так как вам нужна только схема таблицы) Выполните тот запрос, который возвращает объект DataReader. Каждый объект DataReader имеет метод GetTableSchema (), который возвращает объект DataTable со схемой таблицы перкутулат.

Таким образом, вы можете легко получить схему любой таблицы с меньшими усилиями.

Здесь я приведу простой код для этого

SqlConnection con=new SqlConnection("connString");
con.Open();
SqlCommand cmd= new SqlCommand("select top 0 * from Person.Address",con);
DataTable table = cmd.ExecuteReader().GetTableSchema();

Теперь этот объект таблицы имеет информацию о схеме таблицы Person.Address.

1 голос
/ 24 ноября 2011

Я думаю, sp_help возвращает несколько наборов результатов, поэтому вам нужно будет использовать NextResult, здесь есть более подробная информация - http://support.microsoft.com/kb/311274 (пример не sp_help, но он должен дать вам общая идея)

0 голосов
/ 26 сентября 2012

Начиная с .net 2.0 класс SqlConnection предлагает метод GetSchemaMethod, который можно использовать для получения запрошенной информации.

http://msdn.microsoft.com/en-us/library/ms136364(v=vs.80).aspx

0 голосов
/ 24 ноября 2011
0 голосов
/ 24 ноября 2011

sp_help не работает в вашем коде? может быть, вам нужно включить оператор execute: exec sp_help. или, может быть, приложение работает под учетной записью, которая не имеет разрешения для sp_help.

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