Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有存储过程的动态SQl_C#_Sql Server 2008 - Fatal编程技术网

C# 带有存储过程的动态SQl

C# 带有存储过程的动态SQl,c#,sql-server-2008,C#,Sql Server 2008,如何将sp_executesql与动态值参数一起使用 我想通过循环从逗号分隔的字符串或类似的内容生成参数值 declare @sql nvarchar(1000), @answer nvarchar(1000) set @sql='SELECT TOP 1000 [UserID] ,[DateOfBirth] ,[UserActivityType] ,[FirstName] ,[LastName] ,[Gender] FROM [

如何将sp_executesql与动态值参数一起使用

我想通过循环从逗号分隔的字符串或类似的内容生成参数值

declare @sql nvarchar(1000),  @answer nvarchar(1000)
set @sql='SELECT TOP 1000 [UserID]
      ,[DateOfBirth]
      ,[UserActivityType]
      ,[FirstName]
      ,[LastName]
      ,[Gender]
  FROM [LogX].[dbo].[UserDetails] where firstname=@name and gender =@gender '
  set @values =  '"jack","1"' 
  EXEC  sp_executesql   @sql  , N'@name nvarchar(100),@gender tinyint',@values 
请注意,可以有两个以上的参数 有什么想法吗? 谢谢。

试试这个

declare @sql nvarchar(1000),  @answer nvarchar(1000)
set @sql='SELECT TOP 1000 [UserID]
      ,[DateOfBirth]
      ,[UserActivityType]
      ,[FirstName]
      ,[LastName]
      ,[Gender]
  FROM [LogX].[dbo].[UserDetails] where firstname='+@name+' and gender ='+@gender
  set @values =  '"jack","1"' 
  EXEC  sp_executesql   @sql  , N'@name nvarchar(100),@gender tinyint',@values

使用字符串连接传递参数

您知道sp_executesql的整个要点是阻止您进行字符串连接。您可以使用linq之类的库为您动态生成查询,然后使用sp_Executesql


在SQL查询中,字符串连接是对网站和应用程序SQL攻击的一种关键攻击向量。p> 您需要将CSV字符串的值解析为不同的变量,然后传递给sp_executesql-当您这样做参数化SQL时(这正是您应该做的),没有办法解决这个问题


否则,您将考虑对动态SQL执行(可怕的)字符串连接,而不是参数化,这将是不好的;升降台--我不会投反对票,因为这是一个有效的答案,但这是一个糟糕的想法,谢谢Spence是的,这是一个很大的错误,你能告诉我怎么做吗?我的意思是如何在运行中创建多个参数?因为可能会有1到10个你知道这是一个动态的非常感谢。