ORA-01036 非法的变量名/编号,(解决)

博客分类:

SQL 

下边的代码就会造成  ORA-01036 非法的变量名/编号

  1. cmd.CommandText = "SELECT * FROM kk.kkyh WHERE id = @comboBox1 and password = @textBox1 ";
  2. cmd.Parameters.Add("@comboBox1", OracleType.VarChar).Value = comboBox1.Text;
  3. cmd.Parameters.Add("@textBox1", OracleType.VarChar).Value = textBox1.Text;

把SQL中的@改成:,把.Add中的@去掉,就正常了

  1. cmd.CommandText = "SELECT * FROM kk.kkyh WHERE id = :comboBox1 and password = :textBox1 ";
  2. cmd.Parameters.Add("comboBox1", OracleType.VarChar).Value = comboBox1.Text;
  3. cmd.Parameters.Add("textBox1", OracleType.VarChar).Value = textBox1.Text;

黑色头发  http://heisetoufa.iteye.com

===============================================================

最近写程序,用EnterpriseLibrary往Oracle中插入数据,出现错误ORA-01036:非法的变量名/编号,代码如下:
DbConnection m_con = g_db.CreateConnection();
m_con.Open();
DbCommand m_com = g_db.GetSqlStringCommand("insert into USER_DEPARTMENT(DEPARTNAME,PARENTDEPID) values(@departname,@parentdepid)");
            g_db.AddInParameter(m_com, "@departname", DbType.String, this.TextBox1.Text);
            g_db.AddInParameter(m_com, "@parentdepid", DbType.String, this.TreeView1.SelectedNode.Value);
g_db.ExecuteNonQuery(m_com);
 m_con.Close();
若换成
DbCommand m_com = g_db.GetSqlStringCommand("insert into USER_DEPARTMENT(DEPARTNAME,PARENTDEPID) values('" + this.TextBox1.Text + "','" + this.TreeView1.SelectedNode.Value + "')");
则没有问题,上网查也没找到解决办法,经过一番探索,终于找到原因了,Oracle中好象不支持@,把@换成:就可以了,代码如下:
DbConnection m_con = g_db.CreateConnection();
m_con.Open();
DbCommand m_com = g_db.GetSqlStringCommand("insert into USER_DEPARTMENT(DEPARTNAME,PARENTDEPID) values(:departname,:parentdepid)");
            g_db.AddInParameter(m_com, ":departname", DbType.String, this.TextBox1.Text);
            g_db.AddInParameter(m_com, ":parentdepid", DbType.String, this.TreeView1.SelectedNode.Value);
g_db.ExecuteNonQuery(m_com);
 m_con.Close();

另外,Oracle中如果不用begin...end,SQL语句中不要有分号(;)。

========================================================

publicbool ModifyDrawBill(MDrawBill mBill)
{
StringBuilder strSQLText =new StringBuilder();
strSQLText.Append("update DrawBill set ");
OracleParameter[] param =
{
new OracleParameter("PKID", OracleType.Int32),
new OracleParameter("StationId", OracleType.VarChar),
new OracleParameter("BillBegin", OracleType.VarChar),
new OracleParameter("BillEnd", OracleType.VarChar),
new OracleParameter("SumCount", OracleType.Int32),
new OracleParameter("DrawDate", OracleType.DateTime),
new OracleParameter("IsConfirm", OracleType.Int32),
new OracleParameter("AppUser", OracleType.NVarChar),
new OracleParameter("CheckUser", OracleType.NVarChar),
new OracleParameter("Memo", OracleType.NVarChar)
};
//@@lwd 20110803
param[0].Value = mBill.PKID;
if (mBill.StationId !=null)
{
strSQLText.Append("StationId=:StationId,");
param[1].Value = mBill.StationId;
}
if (mBill.BillBegin !=null)
{
strSQLText.Append("BillBegin=:BillBegin,");
param[2].Value = mBill.BillBegin;
}
if (mBill.BillEnd !=null)
{
strSQLText.Append("BillEnd=:BillEnd,");
param[3].Value = mBill.BillEnd;
}
if (mBill.SumCount !=null)
{
strSQLText.Append("SumCount=:SumCount,");
param[4].Value = mBill.SumCount;
}
if (mBill.DrawDate !=null)
{
strSQLText.Append("DrawDate=:DrawDate,");
param[5].Value = mBill.DrawDate;
}
if (mBill.IsConfirm !=null)
{
strSQLText.Append("IsConfirm=:IsConfirm,");
param[6].Value = mBill.IsConfirm;
}
if (mBill.AppUser !=null)
{
strSQLText.Append("AppUser=:AppUser,");
param[7].Value = mBill.AppUser;
}
if (mBill.CheckUser !=null)
{
strSQLText.Append("CheckUser=:CheckUser,");
param[8].Value = mBill.CheckUser;
}
if (mBill.Memo !=null)
{
strSQLText.Append("Memo=:Memo,");
param[9].Value = mBill.Memo;
}
if (strSQLText.ToString().EndsWith(","))
{
strSQLText = strSQLText.Remove(strSQLText.ToString().Length -1, 1);

}
strSQLText.Append(" where PKID=:PKID ");
return OracleHelper.ExecuteNonQuery(OracleHelper.Connection_String, CommandType.Text, strSQLText.ToString(), param) >0;//提示“RA-01036: 非法的变量名/编号” }

==================================================

string sql = " select rownum as   logrow,Id,UserId,UserLogCategoryId,SystemLogCategoryId,Time,ReadT,Title,Content,Permission from LogT where UserId=:UserId and Title like :Title ";
if (Title == null) Title = "";
Title = "%" + Title + "%";
OracleParameter[] paras = new OracleParameter[] { new OracleParameter(":UserId", UserId) , new OracleParameter(":Title", Title)}; ======================================================================================================

oracle中错误ORA-01036: 非法的变量名/编号

 

C#

public Result AddUser(UserEntity user)
       {
           Result result = new Result(true);
           DbCommand dbCmd = db.GetSqlStringCommand("PK_TY_USER.INS_USER");
           db.AddInParameter(dbCmd, "id", DbType.Int32, user.Id);
           db.AddInParameter(dbCmd, "names", DbType.String, user.Name);
           db.AddInParameter(dbCmd, "sex", DbType.String, user.Sex);
           db.AddInParameter(dbCmd, "nav", DbType.String, user.Native_Place);
           db.AddInParameter(dbCmd, "birday", DbType.DateTime, user.Birthday);
           db.AddInParameter(dbCmd, "age", DbType.Int32, user.Age);
           try
           {
               db.ExecuteNonQuery(dbCmd);
           }
           catch (Exception ex)
           {

result.Success = false;
               result.Error = ex;
               throw ex;
           }

return result;
       }

oracle

procedure INS_USER(id in integer,names in varchar2,sex in varchar2,nav in varchar2,birday in date,age in integer) is
                  begin
                       insert into ty_user values(id,names,sex,nav,birday,age);
                  end;

oracle中测试能过

==========================================================================

最近写程序时,往Oracle中插入数据,出现错误ORA-01036:非法的变量名/编号,代码如下:

DbConnection conn = GetCon();
            conn.Open();
            DbCommand cmd = conn.CreateCommand();
            string sqlrt= "insert into T_User(Id,Name,Password,E_Mail) VALUES(@id,@name,@password,@email)";

cmd.CommandText = sqlrt;
                cmd.Parameters.Add(new SqlParameter("@id", Convert.ToInt32(txtId.Text)));
                cmd.Parameters.Add(new SqlParameter("@name", txtName.Text));
                cmd.Parameters.Add(new SqlParameter("@password", txtPassword.Text));
                cmd.Parameters.Add(new SqlParameter("@email", txtEmail.Text));
            int num = cmd.ExecuteNonQuery();
            if (num > 0)
            {
                Response.Write("插入成功");
                DataLoad();
            }

解决方案是:

DbConnection conn = GetCon();
            conn.Open();
            DbCommand cmd = conn.CreateCommand();
            string sqlrt= "insert into T_User(Id,Name,Password,E_Mail) VALUES(:id,:name,:password,:email)";

cmd.Parameters.Add(new OracleParameter(":id", Convert.ToInt32(txtId.Text)));
                cmd.Parameters.Add(new OracleParameter(":name", txtName.Text));
                cmd.Parameters.Add(new OracleParameter(":password", txtPassword.Text));
                cmd.Parameters.Add(new OracleParameter(":email", txtEmail.Text));

在Oracle数据库中,参数替换不能使用"@",要使用":",将程序中的@替换成就可以解决这个问题了

 
==============================================================

C# oracle 参数传递的多种方式 留着复习的更多相关文章

  1. Spring学习总结(一)——Spring实现IoC的多种方式

    控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...

  2. 转载“启动\关闭Oracle数据库的多种方法”--来自百度#Oracle

    启动\关闭Oracle数据库的多种方法 启动和关闭oracle有很多种方法. 这里只给出3种方法: l         Sql*plus l         OEM控制台 l         Wind ...

  3. Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域

    Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...

  4. Elasticsearch-2.4.3的3节点安装(多种方式图文详解)(含 head、kopf、marvel、shield和watcher插件安装和使用)

    前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) 我这里,以192.168.80.10(HadoopMaster ...

  5. Shell传参的多种方式

    Shell 传参的多种方式 使用$1 $2 这种类似占位符的方式 # 命令行调用 start.sh 8080 9090 # 脚本中获取 port1=$1 # 8080 port2=$2 # 9090 ...

  6. ORACLE的SQL JOIN方式大全

    ORACLE的SQL JOIN方式大全 在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a que ...

  7. idea打包jar的多种方式

    这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-a ...

  8. Java中测试异常的多种方式

    使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  9. jdbc/ojdbc连oracle的三种方式(转)

    文章转自:http://blog.itpub.net/22664653/viewspace-1383092/ 前言  本文是一篇学习笔记,学习如何通过java jdbc /ojdbc 连接oracle ...

随机推荐

  1. 笔试算法题(01):字符串倒置 & 八皇后问题

    出题:将字符串“ABCD1234efgh”进行前后对调: 分析: 常见的考查指针使用的案例,知道字符串长度之后,依次交换位置i以及位置(length-1-i)上的内容,直到重叠: 注意不能直接修改指针 ...

  2. 关于统一代码规范ResultBean<T>

    之前看了一篇文章,是java团长的一篇代码规范的文章,很有启发.统一返回格式确实给开发带来方便和美感, 有时候Colltroller返回String或者什么Map,list什么的,虽然都转成json返 ...

  3. 基于nvm的Node、NPM的版本管理(NPM permission error的解决)

    最近在使用npm过程中,发现全局安装总会遇到permission相关的错误,所以总是要在前面加sudo,还得不停输入密码. 懒惰使我进步,随手google了一下相关问题的解决方案,发现npm在官方文档 ...

  4. CIFAR100与VGG13实战

    目录 CIFAR100 13 Layers cafar100_train CIFAR100 13 Layers cafar100_train import tensorflow as tf from ...

  5. 初学数位DP

    所谓数位dp,字面意思就是在数位上进行dp,数位的含义:一个数有个位.十位.百位.千位.等等,数的每一位就是数位. 数位DP一般应用于: 求出给定区间[A,B]内,符合条件P[i]的数 i 的个数. ...

  6. Apache Ambari 2.7.3.0 离线安装

    1. 准备 (内存 3G 硬盘 40G) 0)设置ssh无密码 ssh-keygencat id_rsa.pub >> authorized_keyschmod 700 ~/.sshchm ...

  7. 实现下载pdf文件

    //打开文件//$fileDir为文件路径 $fileName为文件名称$file = fopen($fileDir . DS . $fileName, "r");//输入文件标签 ...

  8. two strings

    A1484. two strings(罗干) 时间限制:1.0s   内存限制:256.0MB [问题描述] 给定两个字符串A和B,有五种操作,操作1为在A串开头添加一个字符,操作2为在A串结尾添加一 ...

  9. [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)

    传送门 至少BZOJ过了,其他的直接弃. 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的 ...

  10. 【扫描线】HDU 5124 lines

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 [题意] 在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次 [思路] 最简单 ...