当我Execute
下面的SQL时,Dapper不是替换参数,而是将原始数据写入数据库。
(or对于某些模糊的精确SQL)
INSERT INTO
Blah
SELECT
Id,
GETUTCDATE(),
'Updated Status to WITHDRAWN. JIRA: @JiraTicket. By: admin maintenance task'
FROM
Blahs
WHERE
Id = @Id
相反,这是插入到DB中的相同数据:
Updated Status to WITHDRAWN. JIRA: @JiraTicket. By: admin maintenance task
jiraTicket
的值== AAA123
代码为:
using (TransactionScope scope = new())
{
using (var db = new SqlConnection(_connectionString))
{
var rowsaffected = db.Execute(command, new
{
Id = id,
JiraTicket = jiraTicket
});
// snipped some UI displaying logic
}
if (!isTestRun)
{
scope.Complete();
}
}
我就是不明白?为什么不是代课?
更新1:
我也尝试过这个方法,它给出了相同的输出:
DECLARE @Jira VARCHA(20) = @JiraTicket;
INSERT INTO
Blah
SELECT
Id,
GETUTCDATE(),
'Updated Status to WITHDRAWN. JIRA: @Jira. By: admin maintenance task'
FROM
Blahs
WHERE
Id = @Id
更新2:
这个 * 确实 * 有效,但我觉得很脏。有没有比这个更好的方法?注意:生成参数时的字符串替换....
using (TransactionScope scope = new())
{
using (var db = new SqlConnection(_connectionString))
{
var rowsaffected = db.Execute(command, new
{
Id = id,
JiraTicket = $"Updated Status to WITHDRAWN. JIRA: {jiraTicket} . By: admin maintenance task"
});
// snipped some UI displaying logic
}
if (!isTestRun)
{
scope.Complete();
}
}
1条答案
按热度按时间xytpbqjk1#
参数标记不能位于varchar文本内。如果要将参数值追加到字符串,请使用CONCAT。
所以应该是: