ORA-O1036: недопустимое имя / номер переменной - PullRequest
0 голосов
/ 10 января 2020

Есть много постов, связанных с этим вопросом, но никто не работает для моего случая. Я использую oracle базу данных с C# в visual studio

void addUser()
{
        OracleCommand cmd = new OracleCommand();
        string query ="INSERT INTO users (user_id, f_name, hash, acc_type, cell_no, country, state, city, zip, address, email, img) VALUES ('" +                         Convert.ToString(username) + "','" + Convert.ToString(f_name) + "','" + password + "','" + acc_type + "','" + contactno + "','" + country + "','" + state + "','" + city + "','" + zip + "','" + address + "','" + email + "',imgByte)";
        OracleCommand sc = new OracleCommand(query, usersdb);
        sc.Parameters.AddWithValue("imgByte", imgByte);
        try
        {
            usersdb.Open();
            sc.ExecuteNonQuery();
            usersdb.Close();
            lblSignupError.Visible = true;
            lblSignupError.Text = "Signed up successfully. You can login now.";

            Clear();
            LoginNow();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            if (usersdb.State == ConnectionState.Open)
            {
                usersdb.Close();
            }
        }
}

Вот код для регистрации, чтобы добавить пользователя в БД, но эта ошибка возникает

*** Исключение: «System.Data.OracleClient.OracleException» в System.Data.OracleClient.dll System.Data.OracleClient.OracleException (0x80131938): ORA-01036: недопустимое имя / номер переменной

в System.Data .OracleClient. .Execute (оператор OciStatementHandleHandle, поведение CommandBehavior, логическое значение needRowid, OciRowidDescriptor & rowidDescriptor, ArrayList & resultParameterOrdinals) в System.Data.OracleClient.OracleCommand.ExecuteNonQueryInowididDidDirectoryRowID ta.OracleClient.OracleCommand.ExecuteNonQuery () в StopNShop.SignUpForm.addUser () в E: \ Проекты Visual Studio \ StopNShop \ StopNShop \ SignUpForm.cs: строка 402 ***

1 Ответ

1 голос
/ 10 января 2020

Вы действительно должны использовать параметры для всех ваших входных значений; он не только будет более читабельным, но и предотвратит атаки SQL инъекция .

В ответ на ваш вопрос, oracle параметры должны начинаться с двоеточия, т.е. .

См. Этот пример: { ссылка }

...