Hvorfor ikke bruge en Table-Valued parameter ?
Opret en brugerdefineret tabeltype DateTimes
på SQL
create type DateTimes as table
(
[Value] datetime
)
Rediger derefter din lagrede procedure:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Nu kan du behandle @SourceFileDates
som en skrivebeskyttet tabelvariabel.
Når du angiver din SqlCommand
parametre, er en parameter med tabelværdi angivet som SqlDbType.Structured
og bestået som en DataTable
eller DataRowcollection
. Så du kan udfylde det sådan:
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 er alt pænt og korrekt skrevet... og du behøver ikke at lave nogen strengparsing eller casting.
Som en sidebemærkning kan du lige så godt gå videre og oprette Strings
og Integers
også typer; Du bliver hooked på TVP'er og bruger dem overalt.