Question

dans le codeBeHID, vous ajouteriez la TVP en tant que SQLDBTYPE.Structuré pour une procédure stockée. Mais cela n'existe pas dans un contrôle ASP.NET SQLDaTasource.

J'ai stocké mes datables dans des variables de session (ne vous inquiétez pas, ils sont petits!) Et je dois transmettre ceux-ci comme des paramètres sur SqldataSource (qui possède un certain nombre d'objets de DataNound)

J'ai signalé la source de données à la variable de session mais elle échoue sur la conversion sur le type de table.

EDIT: Disons que je prends la variable de session hors de l'équation (parce que, vraiment, c'est complètement tangentiel)

Il doit y avoir un moyen de joindre un dbtype.structuré à une sqldatasource. Mes envisages à la liste sont de manière appropriée dans le tableau de données mais les procédures de magasin auxquelles elles sont jointes doivent prendre

de TVP

Je ne peux pas croire qu'il n'y aurait aucun moyen d'envoyer un paramètre TVP pour une sqldatasource? Quelles sont mes alternatives?

EDIT2: J'ai cherché à créer un paramètre personnalisé pour le Sqldatasource, mais il me semble toujours que sa méthode "eval" ne sera pas satisfaite du type de données structuré

Edit3: Il commence à comparaître que ma seule option est de faire tout le travail de CodeBeHind pour mes contrôles de données de données. J'ai ajouté une prime au cas où quelqu'un d'autre a une solution élégante.

EDIT4: Existe peut-être une manière que je puisse passer la table comme un objet à une procédure stockée, alors que SQL Server le converse en TVP?

Était-ce utile?

La solution

Je sais que vous avez édité de dire que la session n'a aucune importance, mais j'ai pu obtenir ce travail en utilisant un séanceParameter.J'ai le sentiment que cela fonctionnerait également avec un contrôleur contrôlé.

Vous avez donc un type de table défini par l'utilisateur:

CREATE TYPE TVPType AS TABLE(
    Col1 int,
    Col2 int)
GO

et une procédure stockée qui l'utilise:

CREATE PROC TVPProc(@TVP AS TVPType READONLY) AS
    SELECT * FROM @TVP

Puis une grille de grille liée à une sqldatasource qui choisit de votre SPROC, passant un séanceParameter:

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" />
<asp:SqlDataSource ID="SqlDataSource1" SelectCommand="TVPProc" runat="server" SelectCommandType="StoredProcedure" ConnectionString="Server=(local)\sqlexpress;Database=Graph;Integrated Security=True">
    <SelectParameters>
        <asp:SessionParameter SessionField="MyDataTable" Name="TVP" />
    </SelectParameters>
</asp:SqlDataSource>

Et enfin un peu quelque chose à mettre un jeu de données à la session, même si vous dites que vous l'avez déjà là quand même:

(vb)

<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim MyDataTable As New System.Data.DataTable

        MyDataTable.Columns.AddRange({
            New System.Data.DataColumn("Col1", GetType(integer)),
            New System.Data.DataColumn("Col2", GetType(integer))})

        MyDataTable.Rows.Add(22, 33)
        MyDataTable.Rows.Add(44, 55)
        MyDataTable.Rows.Add(66, 77)

        Session("MyDataTable") = MyDataTable
    End Sub
</script>

(c #)

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        System.Data.DataTable MyDataTable = new System.Data.DataTable();
        MyDataTable.Columns.AddRange(
            new System.Data.DataColumn[] {
                new System.Data.DataColumn("Col1", typeof (int)),
                new System.Data.DataColumn("Col2", typeof (int))});

        MyDataTable.Rows.Add(22, 33);
        MyDataTable.Rows.Add(44, 55);
        MyDataTable.Rows.Add(66, 77);

        Session["MyDataTable"] = MyDataTable;
    }
</script>

qui entraîne une grille finement liée:

text alt

et la requête générée ci-après du profileur:

declare @p1 dbo.TVPType
insert into @p1 values(22,33)
insert into @p1 values(44,55)
insert into @p1 values(66,77)

exec TVPProc @TVP=@p1

Ceci est .NET 4, MSSQL Express 2010, mais devrait fonctionner également également.

Autres conseils

Faites de la classe intermédiaire ou de l'adaptateur qui servira de source à toutes les données automatiques que vous avez déjà.Ensuite, vous êtes en contrôle total pour préparer des arguments à la SPROC exactement comme cela en a besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top