Waarom gebruikt u geen Table-Valued parameter ?
Maak een door de gebruiker gedefinieerd tabeltype DateTimes
op SQL
create type DateTimes as table
(
[Value] datetime
)
Pas dan uw opgeslagen procedure aan:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Nu kunt u @SourceFileDates
. behandelen als een alleen-lezen tabelvariabele.
Bij het specificeren van uw SqlCommand
parameters wordt een tabelwaardeparameter opgegeven als SqlDbType.Structured
en doorgegeven als een DataTable
of DataRowcollection
. U kunt het dus als volgt invullen:
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 is alles mooi en correct getypt... en je hoeft geen strings te ontleden of te casten.
Even terzijde:je kunt net zo goed doorgaan en Strings
. maken en Integers
soorten ook; Je raakt verslaafd aan TVP's en gebruikt ze overal.