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.