c# - 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.dll System.Data.OracleClient.OracleException (0x80131938) 中的“System.Data.OracleClient.OracleException”:ORA-01036:非法变量名称/编号
在 System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) 在 System.Data.OracleClient 的 System.Data.OracleClient.OracleParameterBinding.Bind(OciStatementHandle statementHandle, NativeBuffer parameterBuffer, OracleConnection connection, Boolean& mustRelease, SafeHandle& handleToBind)。 OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior 行为, 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() 在 E:\Visual Studio Projects\StopNShop\StopNShop\SignUpForm.cs:line 402***
解决方案
您真的应该为所有输入值使用参数;它不仅更具可读性,而且可以防止SQL 注入攻击。
在回答您的问题时,oracle 参数应以冒号 ie 为前缀:imgByte
。
推荐阅读
- c - trie 数据结构插入功能不起作用。为什么?
- python - 在Sql中按日期和同一日期的两个不同时间分组
- android - getter 'docs' 在 null 上调用,因为 QuerySnapshot 即使在 initState() 中初始化后也是 null
- reactjs - 导航问题反应原生
- html - CSS:Chrome 和 Firefox 的巨大差异
- azure-devops - 使用 WebPublishMethod 进行打包的 MSBuild 在 zip 文件中产生错误的文件名
- reactjs - 试图在图表中创建一条垂直线
- python - kafka-python 长时间未收到消息时出错
- java - 通过 Selenium Java 获取 Genymotion Appium 自动化异常
- c++ - 多线程 C++ 比单线程执行时间更长