Tại sao không sử dụng tham số Bảng giá trị ?
Tạo loại bảng do người dùng xác định DateTimes
trên SQL
create type DateTimes as table
(
[Value] datetime
)
Sau đó, sửa đổi thủ tục đã lưu trữ của bạn:
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates DateTimes readonly -- must be readonly
)
Bây giờ bạn có thể coi @SourceFileDates
dưới dạng một biến bảng chỉ đọc.
Khi chỉ định SqlCommand
của bạn tham số, tham số Table-Valued được chỉ định là SqlDbType.Structured
và được chuyển dưới dạng DataTable
hoặc DataRowcollection
. Vì vậy, bạn có thể điền nó như sau:
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
});
Giờ đây, mọi thứ đều tốt đẹp và được nhập đúng cách ... và bạn không phải thực hiện bất kỳ phân tích cú pháp hoặc truyền chuỗi nào.
Lưu ý thêm, bạn cũng có thể tiếp tục và tạo Strings
và Integers
các loại cũng vậy; Bạn sẽ được thu hút trên các TVP và sử dụng chúng ở mọi nơi.