存储过程中的DateTime参数

时间:2019-10-19 06:58:45

标签: c# sql-server dapper

我在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)

我用Dapper用C#编写了一个函数,并以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参数不匹配。我的系统日期和时间的格式为“ dd / MM / yyyy”。当我调用该函数并传递DateTime参数时,这是错误的。

  
    

System.Data.SqlClient.SqlException::varchar数据类型到datetime数据类型的转换导致值超出范围。该声明已终止。

  

enter image description here

1 个答案:

答案 0 :(得分:-1)

由于SQL接收的字符串未按照其所需的格式进行格式化,因此您也可以使用:

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

代替:

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

我确定它会起作用!