问题描述
我在oracle数据库写了一个存储过程,有一个参数,PL/SQL里面输入参数执行能得到结果,但是用C#调用的时候输入相同参数得不到结果using(OracleConnectionconnection=newOracleConnection(connectionStringERP)){connection.Open();OracleCommandcmd=connection.CreateCommand();cmd.CommandType=CommandType.StoredProcedure;cmd.CommandText="CUX_ONT_GATEWAY_UTL.cux_ont_create";cmd.Parameters.Add("P_REQUEST_NUM",OracleType.VarChar).Direction=ParameterDirection.Input;cmd.Parameters["P_REQUEST_NUM"].Value="427308";introw=cmd.ExecuteNonQuery();returnrow;}代码就是简单调用存储过程
解决方案
解决方案二:
实在找不到原因,单步调试吧http://www.cnblogs.com/zgqys1980/archive/2012/02/07/2341406.html
解决方案三:
难道都没有出异常,也不贴出错误,看不出来什么的。在using里加个断点调试测试。
解决方案四:
你存储过程连续两次都输入一样的参数执行,也不见得第二次也会有结果比如存储过程执行删除,你输入1,就把id为1的行删除了,你再执行,当然就找不到这一行了
解决方案五:
你存储过程里面是咋样实现的,实现的是啥功能。
解决方案六:
那就是你代码有问题了,不成功有错误信息么?
解决方案七:
目测这么写没什么问题,所以只能逐步调试。oracle比较麻烦,如果是sqlserver可以使用profile监视sql。
解决方案八:
肯定是PLsql中执行了一遍,如何把库中的数据处理掉了;然后数据忘了还原直接那C#去执行这个过程了;相当于PLsql执行了2次,第一次执行成功了,第二次挂掉了,因为第一次把数据删了,真逗
解决方案九:
引用2楼duanzi_peng的回复:
难道都没有出异常,也不贴出错误,看不出来什么的。在using里加个断点调试测试。
我在pl/sql里面直接输入参数就可以得到结果,但是用程序输入参数就得不到相同的结果,用程序能调试存储过程?
解决方案十:
引用7楼gucangen的回复:
肯定是PLsql中执行了一遍,如何把库中的数据处理掉了;然后数据忘了还原直接那C#去执行这个过程了;相当于PLsql执行了2次,第一次执行成功了,第二次挂掉了,因为第一次把数据删了,真逗
我是在pl/sql里直接输参数能得到结果,但是c#调用得不到结果
解决方案十一:
引用6楼smthgdin的回复:
目测这么写没什么问题,所以只能逐步调试。oracle比较麻烦,如果是sqlserver可以使用profile监视sql。
程序可以监视存储过程?
解决方案十二:
我来给你顶一顶么么哒解决了一定要告诉我哟小丁丁
解决方案十三:
引用7楼gucangen的回复:
肯定是PLsql中执行了一遍,如何把库中的数据处理掉了;然后数据忘了还原直接那C#去执行这个过程了;相当于PLsql执行了2次,第一次执行成功了,第二次挂掉了,因为第一次把数据删了,真逗
怎么可能犯这么二的问题,每次操作之后都进行数据恢复。这个问题业务上是处理ERP系统的物料发运单的,即便是新的单子,直接用C#程序调用就不行,直接在PLSQL中执行就可以,不会是数据的问题,这个我可以保证。一直到现在都没有解决。
解决方案十四:
引用12楼nanfeng0230的回复:
Quote: 引用7楼gucangen的回复:
肯定是PLsql中执行了一遍,如何把库中的数据处理掉了;然后数据忘了还原直接那C#去执行这个过程了;相当于PLsql执行了2次,第一次执行成功了,第二次挂掉了,因为第一次把数据删了,真逗怎么可能犯这么二的问题,每次操作之后都进行数据恢复。这个问题业务上是处理ERP系统的物料发运单的,即便是新的单子,直接用C#程序调用就不行,直接在PLSQL中执行就可以,不会是数据的问题,这个我可以保证。一直到现在都没有解决。
对存储过程就是执行ERP系统的物料搬运单,但是用C#调就是不行,直接在PLSQL中执行就行,并没有执行两次,每次都是新建的单子然后执行的,但是出不同的结果,一个能处理成功物料搬运单,一个是处理异常,所以请问有啥办法没?
解决方案十五:
1.检查数据是否连接正确2.试试直接写SQL用Command执行,不要使用传参数的方式,比如”exec......“3....如果上面两步都ok那就使用这种方式吧,毕竟我不能在你那边调试,也不知道,你这里面到底是哪一步出问题了。
其他方案:
试着在存储过程里面手动添加commit看看效果,如果像你说的那样子,不是数据问题,也不是参数类型不一致引起的,那只能怀疑一个东西,就是oracle自己执行存储过程后会默认加个提交动作,这个是你直接执行存储过程时候有的,代码执行存储过程也会加,可不是马上就做的,你就强制让它提交一个,看看是不是就好了