Mengapa tidak menggunakan Parameter Nilai Tabel ?
Buat DateTimes
tipe tabel yang ditentukan pengguna pada SQL
create type DateTimes as table
(
[Value] datetime
)
Kemudian ubah prosedur tersimpan Anda:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Sekarang Anda dapat memperlakukan @SourceFileDates
sebagai variabel tabel hanya-baca.
Saat menentukan SqlCommand
parameter, parameter Tabel-Valued ditetapkan sebagai SqlDbType.Structured
dan diteruskan sebagai DataTable
atau DataRowcollection
. Jadi, Anda dapat mengisinya seperti ini:
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
});
Sekarang semuanya bagus dan diketik dengan benar... dan Anda tidak perlu melakukan penguraian string atau casting.
Sebagai catatan tambahan, Anda sebaiknya melanjutkan dan membuat Strings
dan Integers
jenis juga; Anda akan terpikat pada TVP dan menggunakannya di semua tempat.