mridulkoul123 Ответов: 1

Как искать в текстовом поле введенное число цифра за цифрой


Я хочу найти текстовое поле, введенное цифра за цифрой с обратной стороны, как с помощью массива, а затем показать эти результаты в gridview.

Например, номер 6173456...
теперь при нажатии кнопки он должен сначала найти весь номер,то есть 6173456, а затем...
если найдено хорошо ... покажите его в gridview...в противном случае найдите первые пять no 617345....и так далее....

Что я уже пробовал:

использование системы;
используя системы.Сведения;
использование системы.Конфигурация;
использование системы.Сеть;
используя системы.Веб.Безопасности;
используя системы.Веб.ИП;
используя системы.Веб.Пользовательского интерфейса.WebControls;
используя системы.Веб.Пользовательского интерфейса.WebControls.элемент webPart;
используя системы.Веб.Пользовательского интерфейса.HtmlControls;
использование System.Net;
используя системы.Нет.Розетки;
используя системы.Данных.В ODBC;
используя системы.Нет.Почта;
используя системы.Текст;
использование системы.ИО;
использование системы.Рисование;
использование системы.Коллекции.Общий;
использование System. Linq;

общественный разделяемого класса _default : на системы.Веб.Пользовательского интерфейса.Страницы
{
DataSet ds = новый набор данных();
DataSet ds1 = новый набор данных();
DataSet ds2 = новый набор данных();
protected void Page_Load(отправитель объекта, EventArgs e)
{

}

частный недействительными привязать()
{
int[] array = new int[50];
char [] sep = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

Строка[] чисел = текстовое поле textbox1.Текст.Сплит(сентября);
//char[] sample = TextBox1. Text.ToCharArray();
//int i = преобразовать.ToInt32(TextBox1. Text);
// int[] i = преобразовать.ToInt32(Textbox1 Элемент.Текст).ToCharArray();
for (int i = 0; i < 7; i++)
{
//массив[я] = инт.Разбор(образец[я].Метод toString());
//array[i] = Int32. Parse(numbers[i]);
массив = массив = текстовое поле textbox1.Текст.Сплит().Выберите(х => У типа int32.Разобрать(ч)).Метод toArray();
//DataSet ds = новый набор данных();
OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings ["connect1"]. ConnectionString);
OdbcCommand команду cmd = новый OdbcCommand("выберите префикс как префикс , назначения, назначения, цены как цены от allrates где prefix = '" + массив[я] + "'", кон);
против.Открыть();
OdbcDataAdapter da = новый OdbcDataAdapter (cmd);
да.Заполнить(ДС);
против.Закрывать();



если (ДС.Таблицы[0].Строк.Граф > 0)
{
GridView1. DataSource = ds;
Управления gridview1.Привязку();

}

}

}






охраняемых недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
связывать();
}
}

1 Ответов

Рейтинг:
12

OriginalGriff

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

Один из способов взглянуть на это - использовать подстроку, потому что Split удаляет совпадающие символы, поэтому вы получите массив пустых строк, а не что-то более короткое.

public static string[] GetShorterNumbers(string numbers)
    {
    int len = numbers.Length;
    string[] result = new string[len];
    for (int i = 0; i < len; i++)
        {
        result[i] = numbers.Substring(0, len - i);
        }
    return result;
    }
Тогда у вас есть выбор, как это сделать: либо выдавать SQL-команды для каждой строки по очереди, пока не получите совпадение, либо использовать предложение OR, чтобы сделать их все сразу, и получить самый длинный результат.


mridulkoul123

Огромное спасибо...вы спасли меня...но извините за неудобства, просто я не могу получить результат в gridview. Может быть, я сегодня болен...

я пытаюсь сказать, что когда вставляешь число типа " 614 "в текстовое поле, и если этого числа нет в базе данных, то серия, содержащая "61", должна отображаться в gridview, а если 61 там нет, то номера серии " 6 " должны отображаться в gridview...

то, что я пробовал до сих пор...


int len = TextBox1. Text. Length;
string [] result = новая строка[len];
for (int i = 0; i < len; i++)
{
результат[я] = текстовое поле textbox1.Текст.Подстрока(0, Лен - я);
OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings ["connect1"]. ConnectionString);
OdbcCommand команду cmd = новый OdbcCommand("выберите префикс как префикс , назначения, назначения, цены как цены от allrates где prefix = '" + результат[я] + "'", кон);
против.Открыть();
OdbcDataAdapter da = новый OdbcDataAdapter (cmd);
да.Заполнить(ДС);
против.Закрывать();

если (ДС.Таблицы[0].Строк.Граф > 0)
{
GridView1. DataSource = ds;
Управления gridview1.Привязку();

}

OriginalGriff

Поэтому вам нужно добавить разрыв, когда вы найдете первый не заданный набор, возвращенный вашим адаптером данных.

И не связывайте строки! Всегда используйте параметризованный запрос, или ваш пользователь может делать с вашей базой данных все, что ему заблагорассудится, включая ее удаление...

mridulkoul123

не могли бы вы немного развить его на примере сверху...еще раз извините за неудобства ...

OriginalGriff

Ты ведь шутишь, правда?
:вздыхать:
Добавьте строку:

перерыв;

после строки

Управления gridview1.Привязку();

mridulkoul123

Ты говоришь что-то вроде этого:

int len = TextBox1. Text. Length;
string [] result = новая строка[len];
for (int i = 0; i < len; i++)
{
результат[я] = текстовое поле textbox1.Текст.Подстрока(0, Лен - я);
OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings ["connect1"]. ConnectionString);
OdbcCommand команду cmd = новый OdbcCommand("выберите префикс как префикс , назначения, назначения, цены как цены от allrates где prefix = '" + результат[я] + "'", кон);
против.Открыть();
OdbcDataAdapter da = новый OdbcDataAdapter (cmd);
да.Заполнить(ДС);
против.Закрывать();

если (ДС.Таблицы[0].Строк.Граф > 0)
{
GridView1. DataSource = ds;

перерыв;

Управления gridview1.Привязку();
}

}

OriginalGriff

Прочтите, что я сказал: "* * после * * строки"
И используйте параметризованный запрос!

mridulkoul123

Мне это действительно нравилось:

int len = TextBox1. Text. Length;
string [] result = новая строка[len];
for (int i = 0; i < len; i++)
{
результат[я] = текстовое поле textbox1.Текст.Подстрока(0, Лен - я);
OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings ["connect1"]. ConnectionString);
OdbcCommand команду cmd = новый OdbcCommand("выберите префикс как префикс , назначения, назначения, цены как цены от allrates где prefix = '" + результат[я] + "'", кон);
кон.Открыть();
OdbcDataAdapter da = новый OdbcDataAdapter (cmd);
да.Заполнить(ДС);
кон.Рядом();

если (ДС.Таблицы[0].Строк.Граф > 0)
{
GridView1. DataSource = ds;
Управления gridview1.Привязку();
перерыв;
}

}

не получилось

OriginalGriff

И что же, по словам отладчика, происходит?

mridulkoul123

его просто ничего не показывает на странице после нажатия кнопки, и я использовал точку останова здесь

если (ДС.Таблицы[0].Строк.Count > 0) / / это ложь здесь.ТАК ЧТО НЕ ПОПАДАЯ ВНУТРЬ, ЕСЛИ ПЕТЛЯ...
{
GridView1. DataSource = ds;


Управления gridview1.Привязку();
перерыв;
}

OriginalGriff

Итак...вам нужно взглянуть на свои данные. Соответствует ли что-нибудь из этого тому, что вы вводите?

mridulkoul123

Да...я ввожу "6134572" в текстовое поле, и в базе данных у меня есть '6134571', '6134570', '6134569' и так далее...
таким образом, он должен показывать серию, имеющую "613457"...но этого не произошло

OriginalGriff

Ну нет, не будет. Вы просите его о точном совпадении:
... Где префикс = '613457'
... Где префикс = '61345'
...
Если вы хотите сравнение "начинается с", вы должны попросить его использовать LIKE:
... Где префикс как 613457%'
... Где префикс как 61345%'
...

mridulkoul123

есть ли у вас @OriginalGriff

mridulkoul123

Спасибо @OriginalGriff ... это сработало ...спасибо большое...это много для меня значит.- я знаю, что ты мастер своего дела ...но если так или иначе я вам понадоблюсь в будущем ...обязательно дай мне знать ...я готов помочь вам в любом случае возможным...

OriginalGriff

Пожалуйста!
И спасибо, я запомню твое предложение!