我想将参数值作为SQL Server
中的Where子句传递。如果我直接在Query中传递值,那么它会向我显示结果,但在将其与SQLCommand
和StorecProcedure
一起使用后,它不会返回任何值。
请帮我解决这个问题。
我的查询:
Select top 15 UserId, (FirstName + ' ' + LastName) as Name from tblUser Where + @AllUserIds + (FirstName + ' ' + LastName) LIKE @Search1 + '%' AND (FirstName + ' ' + LastName) LIKE '%' + @Search2 + '%'
@Search1='abc'
@Search2=''
@AllUserIds=UserId!=2869 AND UserId!=1 AND
C#代码:
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_Teacher_App";
cmd.Parameters.Add("@Search1", SqlDbType.VarChar, 50).Value = Search1;
cmd.Parameters.Add("@Search2", SqlDbType.VarChar, 50).Value = Search2;
AllUserIds = "UserId!=" + AllUserIds.Replace(",", " AND UserId!=") + " AND ";
cmd.Parameters.Add("@AllUserIds", SqlDbType.VarChar).Value = AllUserIds;
cmd.Parameters.Add("@Mode", SqlDbType.VarChar, 30).Value = "GetUserSuggestions";
答案 0 :(得分:0)
涉及灵活数量参数的复杂查询很棘手。幸运的是,像“小巧玲珑”这样的工具可以帮到你。 看起来就像你想要做的事情如下:
int[] userIds = new[] {1,2,3,4};
var query = conn.Query(@"
Select top 15 UserId, (FirstName + ' ' + LastName) as Name
from tblUser Where UserId not in @userIds
and (FirstName + ' ' + LastName) LIKE @Search1 + '%'
and (FirstName + ' ' + LastName) LIKE '%' + @Search2 + '%'",
new { userIds, Search1, Search2 });
foreach(var row in query) {
Console.WriteLine((int)row.UserId);
Console.WriteLine((string)row.Name);
}
请注意dapper在这里帮助我们的事情:
userIds
参数的参数扩展dynamic
,但也支持类型绑定)答案 1 :(得分:0)
更好的方法是使用动态SQL在存储过程中构建查询。
ALTER Procedure [dbo].[sp_Teacher_App]
@AllUserIds nvarchar(100),
@Search1 nvarchar(100),
@Search2 nvarchar(100),
As
SET NOCOUNT ON
declare @selectCols nvarchar(500), @wherClause nvarchar(300), @fromClause varchar(50)
set @selectCols = 'Select top 15 UserId, (Firstname' + '+ ' + 'LastName) as Name'
set @fromClause = ' tblUser ' --you can even pass this as a param
set @wherClause = @AllUserIds
set @query = @selectCols + 'from ' + @fromClause + ' where ' + @wherClause
exec(@query)
SET NOCOUNT OFF
答案 2 :(得分:-2)
再试几个括号。如果这不起作用,请删除所有where条件,并将tyhen一次一个地添加回来,以帮助您诊断问题源自何处。
Select top 15 UserId, (FirstName + ' ' + LastName) as Name
from tblUser
Where
(
@AllUserIds +
((FirstName + ' ' + LastName) LIKE @Search1 + '%' )
AND
((FirstName + ' ' + LastName) LIKE '%' + @Search2 + '%')
)