我有一個有點複雜的查詢,基本上我在大多數字段中搜索數據庫中的字符串或字符串。如果它是多個字符串,則數據庫字段必須匹配字符串的所有部分。爲什麼我的參數化查詢不起作用?
這是該查詢是建立在基本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行並取消註釋它下面的參數值,那麼結果就像我應該看到的那樣。由於這是一種不安全的方式,所以我想知道爲什麼使用參數失敗。
你試過只是打印出結果查詢,看看你的代碼實際上是提交到數據庫? – 2010-06-28 18:58:51
我可以使用@param [0-x]輸出查詢,但SqlCommand並沒有據我所知,允許我打印出結果查詢。 – Malfist 2010-06-28 19:00:20