Perché non utilizzare un parametro Table-Valued ?
Crea un DateTimes
di tipo tabella definito dall'utente su SQL
create type DateTimes as table
(
[Value] datetime
)
Quindi modifica la tua procedura memorizzata:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Ora puoi trattare @SourceFileDates
come una variabile di tabella di sola lettura.
Quando specifichi il tuo SqlCommand
parametri, un parametro con valori di tabella è specificato come SqlDbType.Structured
e passato come DataTable
o DataRowcollection
. Quindi, puoi popolarlo in questo modo:
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
});
Ora tutto è bello e digitato correttamente... e non devi eseguire analisi o casting di stringhe.
Come nota a margine, potresti anche andare avanti e creare Strings
e Integers
anche tipi; Ti appassionerai ai TVP e li userai ovunque.