gpt4 book ai didi

c# - 为什么我的参数化查询不起作用?

转载 作者:行者123 更新时间:2023-11-30 22:45:16 26 4
gpt4 key购买 nike

我有一个有点复杂的查询,基本上我在数据库的大多数字段中搜索一个或多个字符串。如果是多个字符串,数据库字段必须匹配字符串的所有部分。

这是构建查询的基础 sql:

SELECT wo.ID, {columns} FROM tblWorkOrder wo
LEFT JOIN tblWorkOrderCategory wc
ON wo.CategoryID = wo.ID
LEFT JOIN tblTenant t
ON wo.TenantID = t.ID
LEFT JOIN tblProperty p
ON wo.PropertyID = p.ID
LEFT JOIN tblRentalUnit ru
ON wo.UnitID = ru.ID

列被替换为这个列表:

            "wo.Date", "wo.WorkDesc", "wo.Priority", "wo.WorkDoneBy", "wo.EstimatedCost", "wo.DueDate", "wo.ActualCost", "wo.FinishedDate", "wo.workOrderNum",
"wc.[Description]",
"t.TenantName",
"p.PropertyName",
"ru.UnitNumber"

这就是我构建查询的方式:

        String[] parts = txtSearch.Text.Split(' ');
foreach (String column in columnsToSearch) {
String clause = " (";
for (int i = 0; i < parts.Length; i++) {
clause += column + " LIKE '%@param" + i + "%' ";
if (i + 1 != parts.Length) {
clause += "AND ";
}
}
clause = clause.TrimEnd() + ") ";
sql += clause + " OR ";
}
sql = sql.TrimEnd(new char[] { 'O', 'R', ' ' });

using (SqlConnection conn = new SqlConnection(RentalEase.Properties.Settings.Default.RentalEaseConnectionString)) {
SqlCommand command = new SqlCommand(sql, conn);

for (int i = 0; i < parts.Length; i++) {
command.Parameters.Add("@param" + i, SqlDbType.NVarChar).Value = parts[i];
//command.CommandText = command.CommandText.Replace("@param" + i, parts[i]);
}

只有这个总是不返回任何行。但是,在分配参数值的 for 循环中,如果我注释掉 Parameters.Add 行并取消注释下面的行,我最终会得到我应该看到的结果。由于这是一种不安全的方法,我想知道为什么使用参数失败。

最佳答案

您正在寻找文字 '@Param';你的意思是:

... LIKE '%' + @param" + i + " + '%' ...

因此 TSQL 是:

... LIKE '%' + @param2 + '%' ...

或者更简单;将 '%' 放入调用代码中的值;然后你的代码变成:

... LIKE @param" + i + " ...

TSQL 变成:

... LIKE @param2 ...

关于c# - 为什么我的参数化查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com