Запрос имен столбцов таблицы не возвращает результатов к вызывающему коду - PullRequest
1 голос
/ 15 февраля 2010

У меня есть запрос к хранимой процедуре, который я хочу вернуть детали столбцов в определенной таблице. Когда я запускаю sp в Sql studio management management, я получаю результаты. Проблема в том, когда я пытаюсь выполнить запрос из кода C #. Не выдается никаких исключений, и соответствующие разрешения предоставляются для выполнения процедуры в базе данных, но результаты не возвращаются в код. Я использую корпоративный блок приложений версии 3.1.

Это мой запрос

    SELECT   SysObjects.[Name] as TableName,
             SysColumns.[Name] as ColumnName,
             SysTypes.[Name] As DataType,
             SysColumns.[Length] As Length
    FROM    SysObjects INNER JOIN SysColumns   ON SysObjects.[Id] = SysColumns.[Id]
    INNER JOIN SysTypes  ON SysTypes.[xtype] = SysColumns.[xtype]
    WHERE  SysObjects.[type] = 'U'
        AND SysObjects.[Name] = 'MyTableName'
    ORDER BY  SysObjects.[Name]

C # Телефонный код

using (DbCommand dbCommand = db.GetStoredProcCommand("StoredProcedureName"))
{
    DataSet data = new DataSet();

    db.LoadDataSet(dbCommand, data, "MyTableName");
    if (data.Tables.Count > 0 && data.Tables[0].Rows.Count > 0)
    {
        // Do stuff with the returned data
    }
}

1 Ответ

0 голосов
/ 16 февраля 2011

Я не уверен насчет проблемы C #, но вам следует подумать об изменении вашего запроса для использования уровня абстракции данных, предоставляемого Microsoft. Использование ссылок SYSOBJECTS не обязательно будет одинаковым в разных версиях SQL.

Вместо этого я бы использовал это:

--
-- for a specific tables columns
--
select * 
from INFORMATION_SCHEMA.COLUMNS

--
-- For all the user tables in the current database..
--
select * 
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='MyTableName'
...