我正在编写一条插入语句,但出现上述错误
插入查询
var insertSql = string.Format(
$"INSERT INTO Sales (Date, Team, Sales) VALUES ({0}, {1}, {2})",
new List<SqlParameter>()
{
new("@date", sales.Date.ToString("yyyy-MM-dd")),
new("@team", sales.Team),
new("@sales", sales.Sales),
});
var rowCount = Sql.ExecuteNonQuery(Conn,insertSql);
这是我的表架构和类
SaleId int,
Date Date,
Team varchar(50),
Sales int
public class Sales
{
public int SalesId { get; set; }
public DateTime Date { get; set; }
public string Team { get; set; }
public int Sales { get; set; }
}
我想使用参数化查询来实现此目的,因此尝试了此操作,但给出了上述错误
这里的立即问题是
$"..."
是本身插值字符串,并且您注入的值是literal0
、1
和2
- 它们不是占位符: 它们就是价值观。删除 $
会使其成为适合 string.Format
的文字字符串,但是 您不想在此处使用 string.Format
;另外,您不想格式化日期 - 只需将其作为日期传递即可。
老实说:如果您自己编写 SQL,我不确定这里是否需要 EF;有了 Dapper,这将很简单:
conn.Execute("INSERT INTO Sales (Date, Team, Sales) Values (@Date, @Team, @Sales)",
sales);
或者使用更好的 SQL 格式化技巧:
conn.Execute("""
INSERT INTO Sales (Date, Team, Sales)
Values (@Date, @Team, @Sales)
""", sales);
Dapper 将处理查找
sales.Date
、sales.Team
和 sales.Sales
,并正确添加它们。 EF 可能还有一个用于执行此类临时查询的 API,但是...这感觉更像是 Dapper 场景,除非您对 EF 投入了感情。