Sql server EF Core ExecuteSqlCommandAsync:转换nvarchar值时失败';1,2';到数据类型int
我正在运行执行原始sql以删除我为测试添加的一些记录。如果我在ManagementStudio中运行相同的查询,它可以正常工作,但当我运行该查询EFCore2.0时,它会抛出以下错误Sql server EF Core ExecuteSqlCommandAsync:转换nvarchar值时失败';1,2';到数据类型int,sql-server,entity-framework,asp.net-core-2.0,ef-core-2.0,Sql Server,Entity Framework,Asp.net Core 2.0,Ef Core 2.0,我正在运行执行原始sql以删除我为测试添加的一些记录。如果我在ManagementStudio中运行相同的查询,它可以正常工作,但当我运行该查询EFCore2.0时,它会抛出以下错误 System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value '1,2' to data type int.' 代码 查询执行 从sale.WatchList中删除,其中OfferId在(1,2
System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value '1,2' to data type int.'
代码
查询执行
从sale.WatchList中删除,其中OfferId在(1,2)中,UserId=9
有人能告诉我上面的代码有什么问题吗
感谢您,EF Core将把插入的字符串转换成带参数的查询,以创建可重用的查询并防止SQL注入漏洞。见: 所以 变成
Delete from User where Id in (@ids) and RoleId = @RoleId
与SqlParameters绑定
如果这不是您想要的,只需在前一行上构建SQL查询。EF Core会将插入的字符串转换为带参数的查询,以创建可重用的查询并防止SQL注入漏洞。见: 所以 变成
Delete from User where Id in (@ids) and RoleId = @RoleId
与SqlParameters绑定
如果这不是您想要的,只需在前一行上构建SQL查询。这将不起作用。您必须编写动态查询。请试试下面的一个
var idList = await _dataContext.User.ToListAsync();
var ids = string.Join(",", idList.Select(x => x.Id));
await _dataContext.Database.ExecuteSqlCommandAsync($"execute('Delete from User where Id in ({ids}) and RoleId = {contact.RoleId}')");
这是行不通的。您必须编写动态查询。请试试下面的一个
var idList = await _dataContext.User.ToListAsync();
var ids = string.Join(",", idList.Select(x => x.Id));
await _dataContext.Database.ExecuteSqlCommandAsync($"execute('Delete from User where Id in ({ids}) and RoleId = {contact.RoleId}')");
虽然接受的答案确实有效,但它会产生很多警告,所以现在我使用@Abu Zafor建议的小更改/修复
wait_dataContext.Database.ExecuteSqlCommandAsync($“execute({ids})和RoleId={contact.RoleId}'),Id,contact.RoleId)代码>虽然接受的答案确实有效,但它会产生很多警告,所以现在我使用@Abu Zafor建议的小改动/修复
wait_dataContext.Database.ExecuteSqlCommandAsync($“execute({ids})和RoleId={contact.RoleId}'),Id,contact.RoleId)代码>包含逗号的单个字符串与由逗号分隔的多个字符串(或多个整数)不同。在SQL和大多数其他语言中也是如此。包含逗号的单个字符串与由逗号分隔的多个字符串(或多个整数)不同。在SQL中,大多数其他语言也是如此。虽然这会创建警告,但会创建警告警告警告错误:必须声明标量变量“@p0”。抛出错误:必须声明标量变量“@p0”。