Je viens de parvenir à quelque chose qui fonctionne ! Mais je n'ai encore testé qu'avec des IIdentifiable(Of Byte). Je testerai avec des Short et des Integer dès que je serai arriver à la partie où c'est necessaire.
Voici donc le code de la fonction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Protected Shared Function CreateParameter(Of T, U As PROMO_DTO.IIdentifiable(Of T))(name As String, value As IEnumerable(Of U), prefix As String) As SqlParameter
Dim param As New SqlParameter
Dim dt As New DataTable()
dt.Columns.Add(prefix & "_ID", GetType(T))
dt.PrimaryKey = {dt.Columns(prefix & "_ID")}
For Each d As U In value
Dim dr As DataRow = dt.NewRow
dr.Item(prefix & "_ID") = d.Id
dt.Rows.Add(dr)
Next
param.Direction = ParameterDirection.Input
param.ParameterName = name
param.SqlDbType = SqlDbType.Structured
param.SqlValue = dt
Return param
End Function |
Et le code de l'appel :
cmd.Parameters.Add(CreateParameter(Of Byte, PROMO_DTO.IIdentifiable(Of Byte))("@LIST_DAY", promo.Days, "DAY"))
Où Promo.Days est de type List(Of Day) et Day implémente IIdentifiable(Of Byte).
Par contre, je ne pige pas encore pourquoi je dois lui spécifier les types à utiliser mais je me suis souvenu que Rudy Lavocara (ou qqch du genre, j'écorche tjs son nom ) faisait la même chose avec ses fonctions GetSingleDTO et GetDTOList. Du coup j'ai fait pareil pour tester et ça a marché .
Partager