Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程中的日期时间参数_C#_Sql Server_Dapper - Fatal编程技术网

C# 存储过程中的日期时间参数

C# 存储过程中的日期时间参数,c#,sql-server,dapper,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, T

我在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参数不匹配。我的系统日期和时间格式为“dd/MM/yyyy”。调用函数并传递DateTime参数时出现错误

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


由于SQL接收到的字符串格式不是它想要的格式,因此您也可以使用:

p.Add("@NgaySinh", NgaySinh.ToString("yyyy-MM-dd")); p、 添加(“@NgaySinh”,NgaySinh.ToString(“yyyy-MM-dd”); 而不是:

p.Add("@NgaySinh", NgaySinh); p、 加上(“@NgaySinh”,NgaySinh);
我相信它会成功的

我猜机器上的区域性对于参数抛出的日期有不同的格式?给出错误消息后,我假设它不是
@NgaySinh
,而是
@SDTChaMe
。这是实际表格中的日期吗?如果是这样,我建议修复SP中的类型和代码以匹配,或者至少在将其发送到过程之前将其格式化为正确的格式。为什么不使用
参数。添加
并告诉C它是什么类型的参数,以便它传递
日期时间
,而不是需要RDBMS隐式转换为一个的
nvarchar
?您选择的答案不正确。请向我们展示
HocSinh
CREATE TABLE
脚本。我尝试了这个,但仍然是erorr。[![enter image description here][1][1][1]:请勿使用此解决方案。这并不总是有效(例如,如果dateformat设置为YDM)。您不应该将日期作为字符串传递给服务器-您应该将其作为日期传递。