Varför inte använda en Table-Valued parameter ?
Skapa en användardefinierad tabelltyp DateTimes
på SQL
create type DateTimes as table
(
[Value] datetime
)
Ändra sedan din lagrade procedur:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Nu kan du behandla @SourceFileDates
som en skrivskyddad tabellvariabel.
När du anger ditt SqlCommand
parametrar, anges en tabellvärderad parameter som SqlDbType.Structured
och skickades som en DataTable
eller DataRowcollection
. Så du kan fylla i det så här:
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
});
Nu är allt snyggt och korrekt skrivet... och du behöver inte göra någon stränganalys eller casting.
Som en sidoanteckning kan du lika gärna gå vidare och skapa Strings
och Integers
typer också; Du kommer att fastna för TVP:er och använda dem överallt.