【发布时间】:2019-08-31 02:32:13
【问题描述】:
我看过这个帖子:How to pass parameters to the DbContext.Database.ExecuteSqlCommand method?
我感觉 EF Core 正在阻止我对 Azure Sql 数据库中的 truncate 表使用参数化查询。
我试过了:
var tableName = csvEntity.FileName.Replace(".csv", string.Empty);
var tableNameParam = new SqlParameter("@TableName", tableName);
await DbContext.Database.ExecuteSqlCommandAsync("TRUNCATE TABLE @TableName", tableNameParam);
还有:
await DbContext.Database.ExecuteSqlCommandAsync("TRUNCATE TABLE @{0}", tableNameParam);
还有:
await DbContext.Database.ExecuteSqlCommandAsync($"TRUNCATE TABLE {tableName}");
还有:
await DbContext.Database.ExecuteSqlCommandAsync("TRUNCATE TABLE {tableName}", tableName);
但所有这些都会导致:
错误:“@TableName”附近的语法不正确。
但是如果我跑了
await DbContext.Database.ExecuteSqlCommandAsync("TRUNCATE TABLE AllStarFull");
我们都很好!
你不能在带有ExecuteSqlCommandAsync的截断语句中使用变量作为表名
一些屏幕截图:
例外:
异常前的第三次尝试
第三次尝试异常
【问题讨论】:
-
否,参数不能用于传递表名。说我想知道为什么你的
$"TRUNCATE TABLE {tableName}"不起作用。你确定你写的和这里显示的完全一样吗?当你尝试这个时,你能告诉我们你的tableName变量是什么吗? -
是的,添加了截图
-
屏幕截图显示了您的第一次尝试。您能否向我展示您问题中的第三次尝试。一个你使用
await DbContext.Database.ExecuteSqlCommandAsync($"TRUNCATE TABLE {tableName}");的地方 -
第三次尝试更新
-
是的,马上就这样做,并为来到这里的其他人做出正确的解释。
标签: c# sql entity-framework .net-core