Я пытаюсь создать функцию поиска, которая ищет GridView для определенного значения, а затем возвращает эту строку. Я проверил этот запрос в MySQL Workbench и он работает, но когда запрос выполняется в визуальной студии, я получаю эту ошибку:error in Search SQL-запрос
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?parameter0' at line 23
StringBuilder SQL = new StringBuilder(SearchSQL);
if (SearchFieldKey != null && SearchFieldKey.Length > 0)
{
if (SearchTerms != null)
{
SQL.Append(" HAVING ");
for (int i = 0; i < SearchFieldKey.Length; i++)
{
if (SearchFields.ContainsKey(SearchFieldKey[i]))
{
SQL.Append(SearchFields[SearchFieldKey[i]] + " LIKE ?parameter" + i.ToString());
param.Add(new MySqlParameter("parameter" + i.ToString(), "%" + SearchTerms[i] + "%"));
if (i != SearchFieldKey.Length - 1)
SQL.Append(" OR ");
}
else
throw new Exception("Error: Attempted to search on invalid field. Check SearchFields Argument.");
}
}
}
SQL.Append(" '); ");
SQL.Append ("prepare stmt from @sql; execute stmt; deallocate prepare stmt;");
При отладке этого я скопировал точный запрос бежится и вставить его в Workbench и оно работает. Поэтому я не знаю, почему он не будет работать в визуальных студиях.
Запрос получает бежать из этого кода:
DataTable dtJobs = Job.CustomFill(SQL.ToString(), param);
А параметры, передаваемые в это "% ТЕСТИРОВАНИЕ%"
Запрос, который выводит строку из базы данных:
private static string SearchSQL
{
get
{
return @"
SET group_concat_max_len=10000000;
set @sql = null;
select
group_concat(distinct
concat(
'MAX(CASE WHEN pt.Code = ''',
pt.Code ,
''' THEN jp.AdvisedQty ELSE 0 END) AS `',
pt.Code, '`'
)
) into @sql
FROM customer c
LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID
JOIN AddressType jat ON ja.AddressType = jat.ID and jat.Description = 'Debtor'
LEFT JOIN job_new jn ON ja.JobID = jn.ID
LEFT JOIN job_pieces jp ON ja.JobID = jp.ID
LEFT JOIN piecestype pt on jp.TypeID = pt.ID
WHERE c.Company_ID = ?compid;
set @sql = concat('select
c.Name,
COUNT(distinct jn.ID) as Jobs,
(SELECT Name FROM job_address WHERE AddressType =3 AND JobID = jn.ID) as CollectName,
(SELECT Name FROM job_address WHERE AddressType =2 AND JobID = jn.ID) as DeliverName,
', @sql, '
FROM customer c
LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID
JOIN AddressType jat ON ja.AddressType = jat.ID and jat.Description = ''Debtor''
LEFT JOIN job_new jn ON ja.JobID = jn.ID
LEFT JOIN job_pieces jp ON ja.JobID = jp.ID
LEFT JOIN piecestype pt on jp.TypeID = pt.ID
WHERE c.Company_ID = ', ?compid,
' GROUP BY c.ID
";
}
}
Итак, мой поисковый запрос помещает HAVING c.Name LIKE "%PRL%" ');
сразу после GROUP BY из запроса. Затем заявления Append помещают подготовленные stmts в конец запроса.
Я думаю, вам нужно использовать '@' вместо '?' при связывании параметров. –
Добавьте код, чтобы распечатать заполненный SQL, чтобы вы могли его увидеть. Из этого следует, что проблема. Если по какой-то причине вам это не очевидно, отредактируйте заполненный SQL в вопрос, и, вероятно, это будет очевидно где-то здесь. Однако на первый взгляд вам не хватает логических операторов «AND» или «OR» между параметрами. –
@EvanMulawski MySql может использовать '?' –