SQL Server C#:SqlCommand是SQL查询名还是存储过程名?[已关闭]

np8igboo  于 2023-01-01  发布在  C#
关注(0)|答案(1)|浏览(157)

15小时前关门了。
Improve this question
我正在寻找验证查询文本的最佳解决方案。我需要知道cmdText是否是一个有效的名称?这是func必须为这些值返回true:

"Proc1", "[Proc1]", dbo.Proc1, [dbo].Proc1, [Proc 1]

SQL查询为false:

"SELECT 1 /* more text more text */".

请以最佳方式重新编码IsName函数...

void CreateCommand(string? cmdText)
{
    Microsoft.Data.SqlClient.SqlCommand command = new();
    command.CommandText = cmdText;

    if (IsName(cmdText)) 
        command.CommandType = CommandType.StoredProcedure;
}

bool IsName(string? cmdText) => (cmdText?.Length > 50) ? false : true;
gupuwyp2

gupuwyp21#

使用正则表达式的解:

Regex.IsMatch(cmd, @"^(\w+|\[[^\]]+\])(\.(\w+|\[[^\]]+\]))?$")

说明:

  • (\w+|\[[^\]]+\])匹配一个"word"字符序列(您可以根据需要将\w替换为[A-Za-z0-9_]或类似字符),或者匹配一个除](括在方括号中)以外的任何字符序列。
  • (\.(\w+|\[[^\]]+\]))?匹配后面跟有上述相同内容的点,或不匹配任何内容
  • ^$定位符分别匹配字符串的开始和结束
    • 更新**:将.+?替换为[^\]]+,因为原始正则表达式也将匹配"[a].[b]. c"。

相关问题