以下sql(Sql Server 2016)生成错误:
INSERT INTO Requests (EntryDate,Status, AccountID)
VALUES (@EntryDate,@Status,@accountID)";
try
{
DatabaseConnection.Execute(sql,
new
{
DateTime.Now,
Status = (int)Status.New, '''an enum
accountID,
}, this.Transaction);
这会产生错误:
Must declare scalar variable @EntryDate.
如果我用getdate()替换@EntryDate,则运行正常。即使看起来似乎没有使用getdate()。为什么这个值?
答案 0 :(得分:1)
@EntryDate
是您的命令的参数。您必须提供它,即使该值未使用,否则SQL Server将查找名为@EntryDate
的变量(同样不存在)。
如果您编写new { DateTime.Now, ... }
,则传递的匿名对象具有名为Now
的属性,该属性无法映射到实际参数。将DateTime.Now
更改为EntryDate = DateTime.Now
,以便名称匹配。问题没有指定你正在使用哪个对象关系映射器(Dapper?),但它们都需要以某种方式传递命名参数。