有一个 SQL 表示例列 Id-Pk-int, Name-varchar(250), ...
使用 EF 核心
当我执行
var data= (from c in _db.Table.FromSql($"select * from Emp where id=1")
select c).FirstOrDefault();
返回成功
但是当我使用 where 子句名称(字符串)执行时
var data = (from c in _db.Table.FromSql($"select * from Emp where Name=Mike")
select c).FirstOrDefault();
我收到一个异常 System.Data.SqlClient.SqlException: '无效的列名 'Mike'。'
我测试了我是否更改了数据库列中的数据:Name to 123 (number) 它有效但当值为字符串时失败
答案 0 :(得分:1)
我认为问题的发生是因为您忘记使用 '
符号。因为异常说没有名为 Mike 的列。正如我从代码中看到的那样,列名应该是“名称”。
检查 Name
列是否为 VARCHAR
。如果列是 VARCHAR
,则需要使用 ' 符号。如果没有,您可以使用 like WHERE ID=1
使用那个;
var data = (from c in _db.Table.FromSql($"select * from Emp where Name='Mike'")
select c).FirstOrDefault();
编辑 2:我看到您说的是 Id-int、Name-varchar。你能用我写的代码吗?谢谢。
答案 1 :(得分:0)
您应该使用正确的参数化,不要将数据连接或插入到查询中,否则您将容易受到注入攻击和语法错误的影响。
var data = (from c in _db.Table.FromSql("select * from Emp where Name = @name",
new SqlParameter("@name", SqlDbType.VarChar, 50){Value = "Mike"})
select c).FirstOrDefault();
var data = (from c in _db.Table.FromSql("select * from Emp where Id = @id",
new SqlParameter("@id", SqlDbType.Int){Value = 1})
select c).FirstOrDefault();
在较新版本的 EF Core 中,以相同的方式使用 FromSqlRaw
。