Шаблоны T4: чтение результирующих столбцов таблицы хранимых процедур - PullRequest
0 голосов
/ 03 июля 2011

Я сейчас изучаю шаблоны T4, и все примеры, которые я получил в интернете, касаются использования таблиц для генерации кода.Я хочу использовать столбцы результатов хранимых процедур для создания автоматизированного пользовательского интерфейса, возможно ли это?ИЛИ Я должен создать представление для того же запроса?в таком случае как читать из вида?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2013

Если вы на самом деле не хотите выполнять хранимую процедуру, поскольку различным хранимым процедурам передается ряд различных параметров, вы можете использовать системную хранимую процедуру sp_describe_first_result_set, чтобы возвращать столбцы результирующего набора, предполагая, что есть только один.

    /// <summary>
/// Returns table for which stored procedures need to be generated.
/// </summary>

string TableName = "usp_getNominalCode";

string SchemaName = "Financial";

DataTable DataTable
{
    get
    {
        if (_table == null)
        {
            Server server = new Server(new ServerConnection(new SqlConnection(this.ConnectionString)));
            SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(this.ConnectionString);
            Database database = new Database(server, connectionStringBuilder.InitialCatalog);
            DataSet storedProcedureColumns = database.ExecuteWithResults("sp_describe_first_result_set @tsql= " + "'[" + SchemaName + "]" + ".[" + TableName + "]'");
            _table = storedProcedureColumns.Tables[0];
        }
        return _table;
    }
}
DataTable _table;

Затем вы можете запросить эту таблицу для ее структуры, как и другой ответ, но она будет немного более общей

0 голосов
/ 05 июля 2011

Я получил решение, и вот как вы можете сгенерировать радиальную сетку непосредственно из имени sp


<#
'requires: <#@ assembly name="System.Data" #>
  dim Server as new Server(".\sqlexpress")
    dim database as new Database(server, "xxxx")
    dim strSpName as String= "sp_xxxx"
    Dim dt as System.Data.DataTable= database.ExecuteWithResults("exec sp_GetEquipment").Tables(0)
    dim ctlName as String = "grdEqp"
#>
<telerik:RadGrid ID="grd" runat="server" Skin="Web20" AutoGenerateColumns="false">
<MasterTableView>
<Columns>

<#
    For Each column As System.Data.DataColumn In dt.Columns
#><telerik:GridBoundColumn DataField="<#=column.ColumnName #>" HeaderText="<#=column.ColumnName  #>"/>
<#Next#>
</Columns>
                </MasterTableView>
</telerik:RadGrid>

...