C # Поиск MS доступа БД по идентификатору - PullRequest
2 голосов
/ 05 июня 2011
private void Filtriraj()
    {
        string filter = string.Empty;
        if (txtID.Text.Length > 0)
        {
            filter = "ID LIKE '%" + txtID.Text + "%'";
        }
        if (txtName.Text.Length > 0)
        {
            filter = "Name LIKE '%" + txtName.Text + "%'";
        }
    }

Я хочу искать в таблицах БД доступа ms в моем приложении c #. Вышеуказанное связано с таблицей «Table1», в которой есть некоторые поля, такие как идентификатор, имя, фамилия, адрес ... Тип идентификатора установлен в автонумерацию, все остальные - в текст. Я могу искать во всех полях, кроме по идентификатору, этот способ выше не будет работать, я получаю исключение, когда пытаюсь выполнить поиск по идентификатору (я набираю в txtbox какой-то идентификационный номер, который находится в db, exmp: '1') Поиск по txtName работает нормально.

1 Ответ

5 голосов
/ 05 июня 2011

Autonumber - это некоторая форма числа (я так думаю), поэтому вы не можете использовать ключевое слово LIKE.Вы должны найти точное совпадение (или больше, чем, меньше и т. Д.).Вы также не можете заключить число в одинарные кавычки, поэтому их нужно будет удалить.

Я бы переключил ваш код на что-то вроде этого:

.
.
.
if (txtID.Text.Length > 0)
{
    int id;
    if (Int32.TryParse(txtID.Text, out id))
    {
        filter = "ID = " + id.ToString();
    }
}
.
.
.

Кроме того, ваш кодпохоже, что он может не работать должным образом, если у вас есть несколько текстовых полей, заполненных данными (потому что вы не используете иначе, если).Независимо от того, какое текстовое поле вы выберете последним, оно будет использоваться в качестве фильтра, потому что вы каждый раз переназначаете переменную фильтра.И если вы используете фильтр текста непосредственно из текстовых полей, вы открываете себя для возможного SQL-инъекции .Вам, вероятно, стоит рассмотреть использование параметризованных запросов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...