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é
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 –