ORA-O1036:非法的变量名称/编号



有很多与这个问题相关的帖子,但没有人为我的情况工作。我在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.OracleException' in System.Data.OracleClient.dll System.Data.OracleClient.OracleException (0x80131938(: ORA-01036: 非法变量名/编号

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

你真的应该对所有输入值使用参数;它不仅更具可读性,而且可以防止SQL注入攻击。

在回答您的问题时,oracle参数应以冒号为前缀,即:imgByte.

请参阅此示例:https://stackoverflow.com/a/11048965/8126362

最新更新