2010-10-15 20 views
0

Si une page Web ASP.NET utilise un ObjectDataSource, pouvez-vous le configurer pour utiliser une procédure stockée qui utilise des paramètres de valeur de table?ObjectDataSource peut-il utiliser des paramètres de table

type défini par l'utilisateur:

CREATE TYPE [dbo].[integer_list_tbltype] AS TABLE 
(
[n] [int] NOT NULL, 
PRIMARY KEY CLUSTERED 
) 

procédure stockée:

CREATE PROCEDURE [dbo].[GeneralReport] 
@intList integer_list_tbltype READONLY 
AS 
BEGIN 
    SELECT * FROM ... 
END 

ASP.NET

<asp:ObjectDataSource ID="GeneralDataSource" runat="server" 
    SelectMethod="GetDataByRange" 
    TypeName="MyProject.GeneralDataSetTableAdapters.GeneralViewTableAdapter" 
    > 
    <SelectParameters> 
     <asp:Parameter Name="intList" />    
    </SelectParameters> 
</asp:ObjectDataSource> 

J'ai essayé accrochage dans l'événement Sélection du ObjectDataSource comme ceci:

protected void GeneralDataSource_Selecting(object sender, System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs e) 
{ 
    var zeroList = new List<SqlDataRecord>(); 
    var tvp_definition = new[] {new SqlMetaData("n", SqlDbType.Int)}; 
    var sqlDataRecord = new SqlDataRecord(tvp_definition); 
    sqlDataRecord.SetInt32(0, 0); 

    zeroList.Add(sqlDataRecord ); 

    e.InputParameters[ "intList" ] = zeroList;   
} 

Mais cela résulte simplement en une "System.ArgumentException: la propriété UdtTypeName doit être définie pour les paramètres UDT." être jeté

+0

Pour clarifier, ceci est utilisé par un contrôle ReportViewer. Les fichiers rdlc aiment utiliser les DataSets pour lier les données au rapport - c'est pourquoi j'utilise un ObjectDataSource –

Répondre

1

Je ne sais pas pourquoi vous souhaitez le faire de cette façon. Voir ce blog post par Lenni Lobel et voir si cela fonctionne pour vous.

* MISE À JOUR: * Pour utiliser la technique que je rapports this comme indiqué sur Codebetter.com

+0

J'utilise un ObjectDataSource car il est utilisé par le contrôle ReportViewer pour afficher un rapport sur la page –

+0

Plain old ADO. Le code net et sélectionne les ensembles de résultats retournés suffira à votre visionneuse de rapports. Je me demande pourquoi vous avez besoin de SQL UDT. – Perpetualcoder

+0

Oh ok. Je veux passer dans un nombre variable de paramètres pour filtrer le rapport .. par exemple. Afficher juste les commandes 1,2,4,6,4 –

0

Par souci d'exhaustivité, c'est une solution possible (même si elle ne probablement tomber dans la catégorie « horrible »! Remplacer l'adaptateur de table généré par l'ensemble de données fortement typé.

par exemple. Puis, mettez à jour l'attribut Type sur le contrôle ObjectDataSource pour faire référence à cette nouvelle classe. par exemple. "MyProject.GeneralDataSetTableAdapters.GeneralViewTableAdapter2"

Vous aimeriez voir une réponse "plus propre" que celle-ci!