oracle存储过程执行事物的问题 在线等

tksnow 2006-12-21 01:33:24
oracle9i中我建了两个存储过程,分别向主从表中insert数据,两个存储过程分别单独执行是成功的。但是建立在一个事物中,只有第一个执行成功,执行第二个的时候提示ORA-01036: 非法的变量名/编号.
请教各位怎么解决这个问题.谢谢!!!
...全文
466 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
tksnow 2006-12-21
  • 打赏
  • 举报
回复
感谢大家问题解决了。 comm.Parameters.Clear(); 清除了一下。
可是我一开始写的时候就没用一个command,报错提示我要有一个command事务。我有点记不清楚了。
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
这样试试:


oraComm.Parameters.Clear();
oraComm.Parameters.Add(new OracleParameter("byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;
yan63 2006-12-21
  • 打赏
  • 举报
回复
怎么清除command参数保留
----------------------------
comm.Parameters.Clear();

弱弱的啰嗦一下,真的没必要在一个command...
tksnow 2006-12-21
  • 打赏
  • 举报
回复
怎么清除command参数保留
yan63 2006-12-21
  • 打赏
  • 举报
回复
在同一个事物中要用同一个command
------------------------------------
没有必要,只要使用一个connnection就可以了,如果一定要同一个command,看一下第二条语句运行前是否把前面insert的参数清空
tksnow 2006-12-21
  • 打赏
  • 举报
回复
oraComm.Parameters.Add(new OracleParameter("byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;
改成这样也不行。

在同一个事物中要用同一个command.






yan63 2006-12-21
  • 打赏
  • 举报
回复
为什么所有的insert要在一个command里做呢?完全可以new一个新的command,可能是你上一个insert的command参数保留,下一个insert没有这个参数,就有这样的问题,
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
别弄错了,这里的不用改..

else
{
strSql += "',:byteZrzp)";
}


这个是要加上的...
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
TO:
oraComm.Parameters.Add(new OracleParameter(":byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;

改成这样试试:

oraComm.Parameters.Add(new OracleParameter("byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;

记得好像Oracle添加参数时,赋值是,参数前的":"要去掉...试试看..
tksnow 2006-12-21
  • 打赏
  • 举报
回复
使用的是一个connection,第一个注掉执行第二个是可以执行的。我跟踪了就是只要有照片信息,即执行if (m_byteZrzp != null)
{
oraComm.Parameters.Add(new OracleParameter(":byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;
}
时有这个LongRaw字段,我加的是二进制照片信息。第一个insert是可以执行成功的,

再执行第二个insert 就会报错了。ORA-01036: 非法的变量名/编号.

如果不照片为null则执行是没有问题的。
yan63 2006-12-21
  • 打赏
  • 举报
回复
oraComm.Connection = m_OracleConn;
oraComm.CommandText = strSql;

-----------------------------------
oraComm是你外部传入的,两个insert要使用事务的话,应该使用同一个oracle connection
m_QzrXx.Insert(oraComm)与m_QXx.Insert(oraComm);使用同一个connection吗
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
跟踪一下看具体执行到什么地方时抛出的异常...
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
你所谓的存储过程不是真正意义上的数据库存储过程吧...

只是把一个操作放在一个方法里写了..
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
那你试着把第一个存储过程注释掉,只调用第二个存储过程可以成功吗?
tksnow 2006-12-21
  • 打赏
  • 举报
回复
下面的代码是一个insert方法,也不是调用数据库的存储过程。请大家看一下。
所有的insert方法都类似。

public int Insert(OracleCommand oraComm)
{
string strSql = "Insert into T_QZRXX(QZRBH,XBDM,GJDM,PCSDM,ZJLXDM,ZRXM,ZRZJH,ZRNL," +
"JTZJ,GZDW,DWDH,GDDH,YDDH,YJDZ,DJSJ,BZ,ZP)" +
"values" +
"(" +
"S_T_QZRXX_QZRBH.NEXTVAL"
+ ",'" + m_strXbID
+ "','" + m_strGjdm
+ "','" + m_strPcsId
+ "','" + m_strZjlxId
+ "','" + m_strZrxm
+ "','" + m_strZrzjh
+ "','" + m_strZrnl
+ "','" + m_strJtzz
+ "','" + m_strZrgzdw
+ "','" + m_strZrdwdh
+ "','" + m_strZrgddh
+ "','" + m_strZryddh
+ "','" + m_strZryjd
+ "',sysdate"
+ ",'" + m_strZrbz;
if (m_byteZrzp == null) //照片为空值
{
strSql += "',null)";
}
else
{
strSql += "',:byteZrzp)";
}
oraComm.Connection = m_OracleConn;
oraComm.CommandText = strSql;
if (m_byteZrzp != null)
{
oraComm.Parameters.Add(new OracleParameter(":byteZrzp", OracleType.LongRaw)).Value = m_byteZrzp;
}
return oraComm.ExecuteNonQuery();
}
tksnow 2006-12-21
  • 打赏
  • 举报
回复
没有联系。
tksnow 2006-12-21
  • 打赏
  • 举报
回复
没有任务联系。
liujia_0421 2006-12-21
  • 打赏
  • 举报
回复
两个存储过程间有什么联系吗?
tksnow 2006-12-21
  • 打赏
  • 举报
回复
是同一个数据库连接。
代码如下

Insert方法为调用存储过程插入数据
public bool Save()
{
OracleCommand oraComm = new OracleCommand();
OracleTransaction oracleTran = m_OracleConn.BeginTransaction();
oraComm.Transaction = oracleTran;
try
{
m_QzrXx.Insert(oraComm);
m_QXx.Insert(oraComm);
m_GrYqJl.Qbh = m_QXx.Qbh;
m_GrYqJl.QZrBh = m_QzrXx.Qzrbh;
m_NfJnJl.Qbh = m_QXx.Qbh;
m_GrYqJl.Insert(oraComm);
m_NfJnJl.Insert(oraComm);
oracleTran.Commit(); }
catch (Exception exp)
{
m_DataException = new DataException(exp.Message);
oracleTran.Rollback(); //回滚事务
return false;
}
return true;
}
tksnow 2006-12-21
  • 打赏
  • 举报
回复
用的是OracleTransaction事务
加载更多回复(4)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧