对于有效的SQL Server Like表达式,任何人都不会想到此检查有什么问题吗?我想也许最后一组是多余的,因为第三组涵盖了它。无论如何-欢迎提出建议或改进。
^(\S*%\S*|\S*_\S*|\S*\[\S+\]\S*|\S*\[^\S+\]\S*)$
我将此作为我的指南: Microsoft Docs for SQL Server LIKE
这是我编写的测试:
[TestMethod]
public void SqlLikeIsValidSqlLikeTest()
{
Assert.IsTrue("123%456".IsValidSqlLike());
Assert.IsTrue("%123456".IsValidSqlLike());
Assert.IsTrue("123456%".IsValidSqlLike());
Assert.IsTrue("123_456".IsValidSqlLike());
Assert.IsTrue("_123456".IsValidSqlLike());
Assert.IsTrue("123456_".IsValidSqlLike());
Assert.IsTrue("1_23%456".IsValidSqlLike());
Assert.IsTrue("123%45_6".IsValidSqlLike());
Assert.IsTrue("123%456".IsValidSqlLike());
Assert.IsTrue("12[34]56".IsValidSqlLike());
Assert.IsTrue("123[1-2]456".IsValidSqlLike());
Assert.IsTrue("123[1234]456".IsValidSqlLike());
Assert.IsTrue("123[^1234]456".IsValidSqlLike());
Assert.IsTrue("[1234]456".IsValidSqlLike());
Assert.IsTrue("123[1234]".IsValidSqlLike());
Assert.IsTrue("123[^1-4]456".IsValidSqlLike());
Assert.IsTrue("[^1-4]456".IsValidSqlLike());
Assert.IsTrue("123[^1-4]".IsValidSqlLike());
Assert.IsTrue("12[3-]56".IsValidSqlLike());
Assert.IsTrue("12[^]56".IsValidSqlLike());
}
[TestMethod]
public void SqlLikeIsNotValidSqlLikeTest()
{
Assert.IsFalse("123456".IsValidSqlLike());
Assert.IsFalse("12[3456".IsValidSqlLike());
Assert.IsFalse("1234]56".IsValidSqlLike());
Assert.IsFalse("12]34[56".IsValidSqlLike());
Assert.IsFalse("]34[56".IsValidSqlLike());
Assert.IsFalse("34[^56".IsValidSqlLike());
Assert.IsFalse("12]34[".IsValidSqlLike());
Assert.IsFalse("12[]56".IsValidSqlLike());
}
答案 0 :(得分:0)
这可能不是您正在寻找的确切解决方案,而是解决问题的一种方法。
如果具有SQL连接,则可以在执行SQL命令之前使用“ SET NOEXEC ON ”命令来避免编写SQL解析器。这告诉SQL不要执行任何命令,只是评估它们是否会被执行。
SqlCommand cmd = new SqlCommand("SET NOEXEC ON", conn);
cmd.ExecuteNonQuery();
cmd = new SqlCommand(sqlToBeChecked, conn);
cmd.ExecuteNonQuery();
如果没有异常抛出,一切都很好。
或者这是其他方法 Query Validation using c#
希望对您有帮助