简体   繁体   中英

Query for table column names returns no results to the calling code

I have a stored procedure query that I want to return the details of columns within a specific table. When I run the sp in Sql server managements studio I get results returned. The problem is when I try to execute the query from C# code. There are no exceptions thrown and the relevant persmissions are granted to execute the procedure in the database but no results are returned to the code. I'm using the enterprise application block version 3.1.

This is my query

    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# Calling code

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
    }
}

I'm not sure about the C# issue, but you should consider changing your query to use the data-abstraction layer provided by Microsoft. The use of the SYSOBJECTS references is not guaranteed to be the same between SQL Versions.

Instead I'd use this:

--
-- 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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM