Существует два типа файлов параметров запуска для базы данных Oracle
blockquote>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
.
Существующая функция автозаполнения поддерживает поиск только по префиксу. Кажется, не существует достойного способа переопределить поведение.
Некоторые люди реализовали свои собственные функции автозаполнения, переопределив событие 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;
}
Вы можете сделать гораздо больше, не слишком много усилий: добавьте текст в текстовое поле,
Если вы решите использовать запрос, основанный на пользовательском вводе, убедитесь, что вы используете SqlParameters, чтобы избежать атак SQL-инъекций
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = "SELECT Name from view_customers where Details LIKE '%" + @SearchParam + "%'";
sqlCommand.Parameters.AddWithValue("@SearchParam", searchParam);
Если вы выполняете этот запрос (с заменой {0}
на введенную строку), вам может потребоваться:
SELECT Name from view_customers where Details LIKE '%{0}%'
LIKE
по-прежнему требуется %
символ ... И да, вы должны использовать параметры, а не доверять вводу пользователя:)
Кроме того, вы, похоже, возвращаете столбец Name
, но запрашиваете Подробности
столбец. Поэтому, если кто-то введет «Джон Смит», если его нет в столбце Подробности
, вы не получите то, что хотите.