Pourquoi ne pas utiliser un paramètre de table ?
Créer un type de table défini par l'utilisateur DateTimes
sur SQL
create type DateTimes as table
(
[Value] datetime
)
Modifiez ensuite votre procédure stockée :
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Vous pouvez maintenant traiter @SourceFileDates
en tant que variable de table en lecture seule.
Lors de la spécification de votre SqlCommand
paramètres, un paramètre de table est spécifié comme SqlDbType.Structured
et transmis en tant que DataTable
ou DataRowcollection
. Ainsi, vous pouvez le remplir comme suit :
var sourceFileDates = new DataTable();
sourceFileDates.Columns.Add("Value", typeof(DateTime));
foreach (DateTime file in job.sourceFiles)
{
sourceFileDates.Rows.Add(file);
}
selectRunCommand.Parameters.Add(new SqlParameter {
ParameterName = "@SourceFileDates",
Value = sourceFileDates,
SqlDbType = SqlDbType.Structured // make sure you specify structured
});
Maintenant, tout est beau et correctement typé... et vous n'avez pas à faire d'analyse ou de conversion de chaîne.
En passant, vous pouvez aussi bien créer des Strings
et Integers
types aussi; Vous deviendrez accro aux TVP et les utiliserez partout.