【发布时间】:2022-12-31 20:30:07
【问题描述】:
我正在寻找验证查询文本的最佳解决方案。我需要知道cmdText 是否有效?这是 func 必须为这些值返回 true:
"Proc1", "[Proc1]", dbo.Proc1, [dbo].Proc1, [Proc 1]
SQL 查询为 false:
"SELECT 1 /* more text more text */".
请以最好的方式重新编码 IsName func ...
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;
【问题讨论】:
-
为什么需要一个函数来确定它?通常,您(或任何使用您的代码的人)应该知道自己是否要调用存储过程,或者是否有临时 SQL 查询
-
这完全基于长度字符串似乎是一个非常糟糕的主意......但这里真的没有“银弹” - 无论你做什么 - 你最终可能会猜错。为什么要猜测?为什么编码器不能使用
SqlCommand说他在做什么 - 调用存储过程,或执行临时 SQL 查询? -
这与试图摆脱另一个额外参数
CommandText没什么不同。 -
但是,answering the X part,您最好的猜测可能是将您的
cmdText传递给parsename,如果返回结果,请查看sys.objects中是否存在具有这些名称和架构的记录以及type ='P'。
标签: c# sql-server sqlcommand