簡體   English   中英

ORA-O1036: 非法變量名/編號

[英]ORA-O1036: Illegal variable name/number

有很多與這個問題相關的帖子,但沒有一個適合我的案例。 我在 Visual Studio 上使用帶有 C# 的 oracle 數據庫

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.dll System.Data.OracleClient.OracleException 中的“System.Data.OracleClient.OracleException”(0x80131938):ORA-01036:非法變量名/編號

在 System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) 在 System.Data.OracleClient.OracleParameterBinding.Bind(OciStatementHandle statementHandle, NativeBuffer parameterBuffer, OracleConnection connection, Boolean& mustRelease, SafeHandle& handleToBind) 在 System.Data.OracleClient。 OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior 行為, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) 在 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor) 在 System.Data.OracleClient.OracleCommand.StopNS 處.SignUpForm.addUser() 在 E:\\Visual Studio Projects\\StopNShop\\StopNShop\\SignUpForm.cs:line 402***

您真的應該為所有輸入值使用參數; 它不僅會更具可讀性,而且會防止SQL 注入攻擊。

在回答您的問題時,oracle 參數應以冒號為前綴,即:imgByte

看這個例子: https : //stackoverflow.com/a/11048965/8126362

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM