Comment passer un tableau de valeur de paramètre
Je suis en train de passer un tableau de valeur de paramètre à une procédure stockée, mais je reçois une exception (voir ci-dessous).
SqlCommand c = new SqlCommand("getPermittedUsers", myConn) { CommandType = CommandType.StoredProcedure };
c.Parameters.AddWithValue("@intNotifyingUserId", notifyingUserId);
c.Parameters.AddWithValue("@tSelectedPdfIds", sharedPdfs).SqlDbType = SqlDbType.Structured;
SqlDataReader dr = c.ExecuteReader();
Le type est défini sur le serveur comme ceci:
CREATE TYPE [dbo].[IdList] AS TABLE(
[Id] [int] NOT NULL
)
J'ai essayé en passant sharedPdfs comme un List<int>
, et IQueryable<int>
, mais l'exception suivante:
Object must implement IConvertible.
Quelqu'un sait ce que je fais de mal? La documentation suppose que je devrais être en mesure de passer à une liste comme une TVP, mais ne donne pas d'exemples.
Merci.
- Comment est
getPermittedUsers
déclaré? - C'est un long shot, mais avez-vous essayé de passer un
int[]
? - Vous avez besoin d'utiliser
DataTable
. - Merci, il a travaillé avec un
DataTable
. Ennuyeux d'avoir à convertir mon IQueryable dans un DataTable, cependant. - Vous pouvez également mettre en place IEnumerable<SqlDataRecord>. lennilobel.wordpress.com/2009/07/29/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer le paramètre comme une
DataTable
,IEnumerable<SqlDataRecord>
, ouDbDataReader
.L'exemple suivant illustre l'utilisation soit d'un
DataTable
ou unIEnumerable<SqlDataRecord>
:Code SQL
De Code C#