C# AutoComplete

Существует два типа файлов параметров запуска для базы данных Oracle pfile (также называемый init.ora файл, который имеет тип text) и spfile (который имеет тип binary). До версии 9i существовал только pfile, но он все еще может быть предпочтительным, но предпочтение отдается в основном обратной совместимости со старыми версиями.

Если запуск выполняется с использованием pfile, как в вашем случае, вам необходимо включить путь к файлу и к файлу :

[117 ]

или вы можете сначала создать spfile с помощью

SQL> create spfile from pfile='/u01/app/oracle/product/12.2.0/dbhome_1/dbs/initSID.ora'

, а затем запустить

SQL> startup

без указания любой файл.

Для менеджера предприятия вам нужно проверить

$ emctl status dbconsole и посмотреть, что он говорит,

и проверить, установлен ли параметр ORACLE_SID.

43
задан dbc 11 March 2016 в 19:06
поделиться

3 ответа

Существующая функция автозаполнения поддерживает поиск только по префиксу. Кажется, не существует достойного способа переопределить поведение.

Некоторые люди реализовали свои собственные функции автозаполнения, переопределив событие OnTextChanged . Это, вероятно, ваша лучшая ставка.

Например, вы можете добавить ListBox чуть ниже TextBox и установить для его видимости по умолчанию значение false. Затем вы можете использовать OnTextChanged события TextBox и SelectedIndexChanged события ListBox для отображения и выбора элементов.

Кажется, это работает довольно хорошо, как примитивный пример:

public Form1()
{
    InitializeComponent();


    acsc = new AutoCompleteStringCollection();
    textBox1.AutoCompleteCustomSource = acsc;
    textBox1.AutoCompleteMode = AutoCompleteMode.None;
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
}

private void button1_Click(object sender, EventArgs e)
{
    acsc.Add("[001] some kind of item");
    acsc.Add("[002] some other item");
    acsc.Add("[003] an orange");
    acsc.Add("[004] i like pickles");
}

void textBox1_TextChanged(object sender, System.EventArgs e)
{
    listBox1.Items.Clear();
    if (textBox1.Text.Length == 0)
    {
    hideResults();
    return;
    }

    foreach (String s in textBox1.AutoCompleteCustomSource)
    {
    if (s.Contains(textBox1.Text))
    {
        Console.WriteLine("Found text in: " + s);
        listBox1.Items.Add(s);
        listBox1.Visible = true;
    }
    }
}

void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
    hideResults();
}

void listBox1_LostFocus(object sender, System.EventArgs e)
{
    hideResults();
}

void hideResults()
{
    listBox1.Visible = false;
}

Вы можете сделать гораздо больше, не слишком много усилий: добавьте текст в текстовое поле,

49
ответ дан 26 November 2019 в 23:03
поделиться

Если вы решите использовать запрос, основанный на пользовательском вводе, убедитесь, что вы используете SqlParameters, чтобы избежать атак SQL-инъекций

SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = "SELECT Name from view_customers where Details LIKE '%" + @SearchParam + "%'";
sqlCommand.Parameters.AddWithValue("@SearchParam", searchParam);
6
ответ дан 26 November 2019 в 23:03
поделиться

Если вы выполняете этот запрос (с заменой {0} на введенную строку), вам может потребоваться:

SELECT Name from view_customers where Details LIKE '%{0}%'

LIKE по-прежнему требуется % символ ... И да, вы должны использовать параметры, а не доверять вводу пользователя:)

Кроме того, вы, похоже, возвращаете столбец Name , но запрашиваете Подробности столбец. Поэтому, если кто-то введет «Джон Смит», если его нет в столбце Подробности , вы не получите то, что хотите.

0
ответ дан 26 November 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: