C# 存储过程中的日期时间参数
我在SQL Server中的表中插入了一个存储过程: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
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)。您不应该将日期作为字符串传递给服务器-您应该将其作为日期传递。