2009-04-08 7 views
1

У меня есть следующий код C#, который я пытаюсь получить, чтобы вернуть результаты хранимой процедуры вместе со схемой этих результатов. Ниже, как в настоящее время выглядит мой код (упрощенный) ...Получение схемы SQL Server для таблицы

Database db = DatabaseFactory.CreateDatabase(); 
DbCommand dbCommand = db.GetStoredProcCommand("MyStoredProcedure"); 
IDataReader drData = db.ExecuteReader(dbCommand); 

DataTable tblSchema; 
tblSchema = drData.GetSchemaTable(); 

GetSchemaTable возвращается пустым. Я прочитал, что мне нужно передать CommandBehavior.KeyInfo методу ExecuteReader, но я не понимаю, как это будет выглядеть так, как у меня есть код, структурированный, так как я передаю dbCommand в ExecuteReader.

ответ

1

Если вы используете System.Data.Common.DbCommand, то, я думаю, вы можете назвать

IDataReader drData = dbCommand.ExecuteReader(CommandBehavior.KeyInfo); 

[EDIT]

Вы можете также использовать

DataSet ds = new DataSet(); 
db.LoadDataSet(dbCommand, ds, "tableName"); 

или

db.ExecuteDataSet 

Это link найденных полезный

Надеется, что это отвечает на ваш вопрос

1

Смущающий старый код времени. Это то, что я использовал, когда я впервые изучал .NET 1.1, а парень, который учил меня, настаивал на использовании DataSets/Tables вместо бизнес-объектов. Это около 5 лет и вырвано из старой библиотеки, но, учитывая имя таблицы, оно даст вам набор данных, содержащий схему таблицы.

public static DataSet GetTableSchema(string tableName) 
{ 
    string query = string.Format("SELECT TOP 0 * FROM {0}", tableName); 

    using (SqlConnection localSqlConn = new SqlConnection(GetConnectionString())) 
    { 
     DataSet ds = new DataSet(); 

     SqlCommand sqlCmd = new SqlCommand(query, localSqlConn); 
     SqlDataAdapter sda = new SqlDataAdapter(sqlCmd); 

     sda.FillSchema(ds, SchemaType.Source, tableName); 
     sda.Fill(ds, tableName); 

     sda.Dispose(); 

     return ds; 
    } 
} 
1

Лучший ответ будет выглядеть следующим образом: 2013 Microsoft Support В статье показать несколько способов для получения информации таблицы, вот один метод.

SqlConnection cn = new SqlConnection(); 
SqlCommand cmd = new SqlCommand(); 
DataTable schemaTable; 
SqlDataReader myReader; 

//Open a connection to the SQL Server Northwind database. 
cn.ConnectionString = "Data Source=server;User ID=login; 
         Password=password;Initial Catalog=Northwind"; 
cn.Open(); 

//Retrieve records from the Employees table into a DataReader. 
cmd.Connection = cn; 
cmd.CommandText = "SELECT * FROM Employees"; 
myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 

//Retrieve column schema into a DataTable. 
schemaTable = myReader.GetSchemaTable(); 

//For each field in the table... 
foreach (DataRow myField in schemaTable.Rows){ 
    //For each property of the field... 
    foreach (DataColumn myProperty in schemaTable.Columns) { 
    //Display the field name and value. 
    Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString()); 
    } 
    Console.WriteLine(); 

    //Pause. 
    Console.ReadLine(); 
} 

//Always close the DataReader and connection. 
myReader.Close(); 
cn.Close(); 
Смежные вопросы