将SQL IN子句与实例一起使用的最佳解决方法java.sql.PreparedStatement是什么,由于SQL注入攻击安全问题,多个值不支持这种解决方法:一个?占位符代表一个值,而不是值列表.
请考虑以下SQL语句:
SELECT my_column FROM my_table where search_column IN (?)
Run Code Online (Sandbox Code Playgroud)
使用preparedStatement.setString( 1, "'A', 'B', 'C'" );本质上是一种非工作尝试,?首先使用的原因是解决方法.
有哪些变通方法?
如何将数组传递给SQL Server存储过程?
例如,我有一份员工清单.我想将此列表用作表,并将其与另一个表连接.但是员工列表应该作为参数从C#传递.
我有一个MS SQL Server 2005数据库.在一些过程中,我将表参数作为nvarchar(以逗号分隔)传递给存储过程,并在内部划分为单个值.我将它添加到SQL命令参数列表中,如下所示:
cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";
Run Code Online (Sandbox Code Playgroud)
我必须将数据库迁移到SQL Server 2008.我知道有表值参数,我知道如何在存储过程中使用它们.但我不知道如何将一个传递给SQL命令中的参数列表.有谁知道Parameters.Add程序的正确语法?或者是否有另一种传递此参数的方法?
c# sql-server stored-procedures sqlcommand table-valued-parameters
我有一个使用IN运算符的Transact-SQL查询.像这样的东西:
select * from myTable where myColumn in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
有没有办法定义一个变量来保存整个列表"(1,2,3,4)"?我该如何定义它?
declare @myList {data type}
set @myList = (1,2,3,4)
select * from myTable where myColumn in @myList
Run Code Online (Sandbox Code Playgroud) .Net中的参数化查询在示例中总是如下所示:
SqlCommand comm = new SqlCommand(@"
SELECT *
FROM Products
WHERE Category_ID = @categoryid
",
conn);
comm.Parameters.Add("@categoryid", SqlDbType.Int);
comm.Parameters["@categoryid"].Value = CategoryID;
Run Code Online (Sandbox Code Playgroud)
但是我碰到了一堵砖墙试图做到以下几点:
SqlCommand comm = new SqlCommand(@"
SELECT *
FROM Products
WHERE Category_ID IN (@categoryids)
OR name LIKE '%@name%'
",
conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
Run Code Online (Sandbox Code Playgroud)
哪里
什么是正确的语法?
假设我得到以下内容:
DECLARE @ExcludedList VARCHAR(MAX)
SET @ExcludedList = 3 + ', ' + 4 + ' ,' + '22'
SELECT * FROM A WHERE Id NOT IN (@ExcludedList)
Run Code Online (Sandbox Code Playgroud)
错误:将varchar值','转换为数据类型int时转换失败.
我理解为什么错误存在,但我不知道如何解决它...
我正在尝试在IEnumerable上编写一个扩展方法,它只适用于值类型和字符串.
public static string MyMethod<T>(this IEnumerable<T> source) where T : struct, string
Run Code Online (Sandbox Code Playgroud)
但是'string'不是有效的约束,因为它是一个密封的类.
有没有办法做到这一点?
编辑:
我实际上要做的是为动态构造的SQL中的"IN"子句准备一个值列表.
我有很多代码实例,例如以下我要清理的代码:
sb.AppendLine(string.Format("AND value IN ({0})", string.Join(",", Values.Select(x => x.ToSQL()).ToArray())));
Run Code Online (Sandbox Code Playgroud)
ToSQL()具有处理SqlInjection的代码.
MySql中的LIKE运算符用于查找包含查询文本的行,例如:
select name from user where name like "%john%"
Run Code Online (Sandbox Code Playgroud)
这将返回John Smith,Peter Johnson等等.
如果我需要相反-找到那些行所载在我们的查询文本?例如,我给它John Smith and Peter Johnson are best friends并希望它找到表中可以在此字符串中找到的所有名称.
怎么做?
假设我有一个表单查询
SELECT * FROM MYTABLE WHERE MYCOL in (?)
Run Code Online (Sandbox Code Playgroud)
我想参数化参数.
有没有一种直接的方法在Java中使用JDBC,以一种可以在不修改SQL本身的情况下在多个数据库上工作的方式?
sql ×5
c# ×3
in-clause ×3
.net ×2
java ×2
jdbc ×2
sql-server ×2
t-sql ×2
constraints ×1
dapper ×1
generics ×1
mysql ×1
parameters ×1
security ×1
sqlcommand ×1
string ×1
value-type ×1