Параметры DateTime в хранимой процедуре - PullRequest
0 голосов
/ 19 октября 2019

У меня есть хранимая процедура вставки в таблицу в SQL Server:

CREATE PROCEDURE ThemHocSinh
    @TenHS NVARCHAR(255),
    @NgaySinh DATETIME,
    @TenChaMe NVARCHAR(255),
    @SDTChaMe VARCHAR(16),
    @DiaChi NVARCHAR(255),
    @LopHC VARCHAR(6)
AS
    INSERT INTO dbo.HocSinh (MaHS, TenHS, NgaySinh, NgayNhapHoc, TenChaMe, SDTChaMe, DiaChi, LopHC)
    VALUES (DEFAULT, @TenHS, @NgaySinh, DEFAULT, @TenChaMe, @SDTChaMe, @DiaChi, @LopHC)

Я пишу функцию на C # с Dapper и передаю динамические параметры с типом DateTime.

public void ThemHocSinh(string TenHS, DateTime NgaySinh, string TenChaMe, string SDT, string DiaChi, string LopHC)
{
    using (MamNonBK context = new MamNonBK())
    {
        using (IDbConnection db = new SqlConnection(context.Database.Connection.ConnectionString))
        {
            var p = new DynamicParameters(); 
            p.Add("@TenHS", TenHS);
            p.Add("@NgaySinh", NgaySinh); 
            p.Add("@TenChaMe", TenChaMe); 
            p.Add("@SDTChaMe", SDT); 
            p.Add("@DiaChi", DiaChi);
            p.Add("@LopHC", LopHC);

            db.Execute("ThemHocSinh", p, commandType: CommandType.StoredProcedure);
        }
    }
}

Но, похоже, моя программа падает, потому что параметр dateTime не совпадает. Моя системная дата и время отформатированы как "дд / мм / гггг". Это ошибка, когда я вызываю функцию и передаю параметр DateTime.

System.Data.SqlClient.SqlException: Преобразование типа данных varchar в datetimeтип данных привел к значению вне допустимого диапазона. Заявление было прекращено.

enter image description here

1 Ответ

0 голосов
/ 19 октября 2019

Поскольку SQL получает строку, не отформатированную так, как он хочет, вы также можете использовать:

p.Add("@NgaySinh", NgaySinh.ToString("yyyy-MM-dd"));

вместо:

p.Add("@NgaySinh", NgaySinh);

и я уверен, что это сработает!

...