EXEC sp_executesql framed from "FromSQLRaw" 未按预期工作
EXEC sp_executesql framed from "FromSQLRaw" not working as expected
我试图通过构造查询,借助“fromSQLRaw”函数,使用我们的 EF 核心应用程序从数据库中获取一些详细信息。
- 这是我想要构建以获得所需结果的最终查询,并且此查询运行良好:
select * from [User] U where Substring(U.UserName, 1,Charindex(' ', M.UserName)) in ('Test1','Test2')
但是,当我尝试按照数据层中的 sqlrawquery 执行此操作时,代码如下:
var userNameParams = new string[userNames.Count];
var sqlParameters = new List<SqlParameter>();
for (var i = 0; i < userNames.Count; i++)
{
userNameParams[i] = string.Format("@p{0}", i);
sqlParameters.Add(new SqlParameter(userNameParams[i], userNames[i]));
}
var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({0})", string.Join(",", userNameParams));
// Executing the SQL Raw Query
var userDetails = await _dbContext.Users.FromSqlRaw(rawCommand, sqlParameters.ToArray()).ToListAsync();
在 运行 这条语句之后,我在 SQL 分析器中检查了框架查询,查询就像
exec sp_executesql N'select * from [User] U where Substring(U.UserName, 1,Charindex('' '', U.UserName)) in (@p0,@p1) ',N'@p0 nvarchar(10),@p1 nvarchar(10)',@p0=N'''Test1''',@p1=N'''Test2'''
但是当我 运行 这个框架查询时,即使有记录我也没有得到结果,但我从第一个查询(第 1 点)得到结果。
哪里出了问题,我们该如何解决?
我需要从 rawsql 构建的查询中获取结果。
var names = string.Join(',', userNames.Select(n => n.ToString()).ToArray());
var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({names})");
试试上面的方法
我试图通过构造查询,借助“fromSQLRaw”函数,使用我们的 EF 核心应用程序从数据库中获取一些详细信息。
- 这是我想要构建以获得所需结果的最终查询,并且此查询运行良好:
select * from [User] U where Substring(U.UserName, 1,Charindex(' ', M.UserName)) in ('Test1','Test2')
但是,当我尝试按照数据层中的 sqlrawquery 执行此操作时,代码如下:
var userNameParams = new string[userNames.Count];
var sqlParameters = new List<SqlParameter>();
for (var i = 0; i < userNames.Count; i++)
{
userNameParams[i] = string.Format("@p{0}", i);
sqlParameters.Add(new SqlParameter(userNameParams[i], userNames[i]));
}
var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({0})", string.Join(",", userNameParams));
// Executing the SQL Raw Query
var userDetails = await _dbContext.Users.FromSqlRaw(rawCommand, sqlParameters.ToArray()).ToListAsync();
在 运行 这条语句之后,我在 SQL 分析器中检查了框架查询,查询就像
exec sp_executesql N'select * from [User] U where Substring(U.UserName, 1,Charindex('' '', U.UserName)) in (@p0,@p1) ',N'@p0 nvarchar(10),@p1 nvarchar(10)',@p0=N'''Test1''',@p1=N'''Test2'''
但是当我 运行 这个框架查询时,即使有记录我也没有得到结果,但我从第一个查询(第 1 点)得到结果。
哪里出了问题,我们该如何解决?
我需要从 rawsql 构建的查询中获取结果。
var names = string.Join(',', userNames.Select(n => n.ToString()).ToArray());
var rawCommand = string.Format("select * from [User] U where Substring(U.UserName, 1,Charindex(' ', U.UserName)) in ({names})");
试试上面的方法