получить схему SQL Server для таблицы - PullRequest
1 голос
/ 08 апреля 2009

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

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.

Ответы [ 4 ]

1 голос
/ 22 июля 2013

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

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();
1 голос
/ 08 апреля 2009

Лучший способ получить схему для хранимой процедуры SQL Server - использовать sql:

EXEC sp_help MyStoredProcedure

См. http://msdn.microsoft.com/en-us/library/aa933429(SQL.80).aspx

1 голос
/ 09 апреля 2009

смущает старое время кода. Это то, что я использовал, когда впервые изучал .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 голос
/ 08 апреля 2009

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

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

[EDIT]

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

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

или

db.ExecuteDataSet

Это ссылка найдена полезной

Надеюсь, что он отвечает на ваш вопрос

...