C # Oledb как заявление не возвращает никаких результатов - PullRequest
2 голосов
/ 14 августа 2011

Я делаю простое приложение asp.net/c# и до сих пор все с Oledb работало просто отлично. Оператор like просто не работает через c #, он работал как SQL-запрос в Access. Я также пытался использовать '*a*' вместо '*@uname*', но он все равно ничего не возвращал.

OleDbDataAdapter dataAdapter = new OleDbDataAdapter(
    "SELECT accounts.ID, uname, firstname, lastname, description FROM accounts, profiles " +
    "WHERE accounts.ID = profiles.ID AND uname like '*@uname*'", connection);
dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = tbxFilter.Text;

Ответы [ 3 ]

4 голосов
/ 14 августа 2011

Ну, отсюда я вижу быстрый способ исправить это:

WHERE accounts.ID = profiles.ID AND uname like @uname

и тогда ваш параметр должен быть определен так:

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "%" + tbxFilter.Text + "%" 

или

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "*" + tbxFilter.Text + "*".

Примечание: на вашем месте я бы не включил tbxFilter.Text напрямую. Вместо этого вы должны использовать это:

tbxFilter.Text.Replace("'", "''")

, поскольку знак 'в вашем параметре повредит ваш SQL-запрос, если его не удвоить. Либо так, либо вы выполняете эту проверку безопасности на обработчиках вашего текстового элемента управления.

2 голосов
/ 14 августа 2011

Проблема в том, что вы не используете правильный подстановочный знак.Access может использовать либо *, либо %, но в большинстве других только %

0 голосов
/ 03 мая 2012

Как-то так у меня работает в моей БД.

dataAdapter
    .SelectCommand
    .Parameters
    .Add(new OleDbParameter("uname", "?" + tbxFilter.Text + "?"));
...