Por que não usar um parâmetro com valor de tabela ?
Crie uma tabela definida pelo usuário
DateTimes
em SQL create type DateTimes as table
(
[Value] datetime
)
Em seguida, altere seu procedimento armazenado:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Agora você pode tratar
@SourceFileDates
como uma variável de tabela somente leitura. Ao especificar seu
SqlCommand
parâmetros, um parâmetro com valor de tabela é especificado como SqlDbType.Structured
e passado como um DataTable
ou DataRowcollection
. Então, você pode preenchê-lo assim: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
});
Agora tudo está bem e digitado corretamente... e você não precisa fazer nenhuma análise ou conversão de strings.
Como uma nota lateral, você também pode ir em frente e criar
Strings
e Integers
tipos também; Você vai ficar viciado em TVPs e usá-los em todo o lugar.