Proč nepoužít Parametr Table-Valued ?
Vytvořte uživatelsky definovanou tabulku typu DateTimes
na SQL
create type DateTimes as table
(
[Value] datetime
)
Poté změňte uloženou proceduru:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Nyní můžete zacházet s @SourceFileDates
jako tabulkovou proměnnou pouze pro čtení.
Při zadávání SqlCommand
parametry, parametr Table-Valued je určen jako SqlDbType.Structured
a předáno jako DataTable
nebo DataRowcollection
. Takže to můžete naplnit takto:
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
});
Nyní je vše pěkné a správně napsané... a nemusíte provádět žádnou analýzu nebo přehazování řetězců.
Jako vedlejší poznámku můžete také pokračovat a vytvořit Strings
a Integers
také typy; Zapojíte se do TVP a budete je používat všude.