entity-framework-core - EF Core 2.2,将字符串参数传递给 FromSql 语句
问题描述
public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber()
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = ' 123')"
).ToList();
}
Corresponding SQL:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = ' 123')
表中的 Job_Number 字段是一个 varchar,并存储有任何未使用数字的前导空格。当我使用 Job_Number 硬编码运行上述函数时,查询会按预期运行。但是,通过将相同的值作为参数传递所生成的 SQL 看起来像这样,并且 SQL 运行似乎传递了一个数字而不是一个字符串:
public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber(string jobNumber)
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumber})"
).ToList();
}
Corresponding SQL with ' 123' passed to the jobNumber string parameter:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = 123)
为什么传入 SQL 语句的字符串参数是 123 而不是 '123'?我不确定如何调整我的函数以使参数不作为数字传递。
每个接受的解决方案的修订代码:
public List<JC_PHASE_MASTER_TOTAL1_MC>GetAllByCompanyCodeJobNumber(string jobNumber)
{
var jobNumberParameter = new SqlParameter("@jobNumber", SqlDbType.VarChar);
jobNumberParameter.Value = jobNumber;
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumberParameter})"
).ToList();
}
解决方案
您是否尝试过显式设置 SQL 数据类型,例如:
public List<JC_PHASE_MASTER_TOTAL1_MC>GetAllByCompanyCodeJobNumber(string jobNumber)
{
var jobNumberParameter = new SqlParameter("@jobNumber", SqlDbType.VarChar);
jobNumberParameter.Value = jobNumber;
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumberParameter})"
).ToList();
}
推荐阅读
- python - 如何遍历 excel 文件表并在 Python 中插入公式?
- r - 为不同时间段创建假人
- android - Recyclerview Binding 处的 Materialcardview 切换无法正常工作
- c# - 如何从数据库中只更新一个模型表?
- c++ - std 将向量 float[3] 移动到向量类 x,y,z
- dll - 从 Rust 中另一个 DLL 中的 DLL 访问静态固定大小数组的元素
- python - 什么云存储服务允许开发者使用免费 API 上传/下载文件?
- javascript - 在 ReactJS 中计时函数的执行时间
- image - 绘制图像功能
- scrapy - 如何在scrapy中循环传递'meta'