Sql server VB.Net升级存储过程调用Oracle数据库moRs.Open(moCmd)
我有一个用VB6编写的程序,我们正在尝试转换为VB.Net。在Microsoft SQL 2012和Oracle中使用此.Open()方法调用存储过程时,Microsoft SQL可以正常执行,而Oracle则不能。下面是一段代码:Sql server VB.Net升级存储过程调用Oracle数据库moRs.Open(moCmd),sql-server,vb.net,oracle,Sql Server,Vb.net,Oracle,我有一个用VB6编写的程序,我们正在尝试转换为VB.Net。在Microsoft SQL 2012和Oracle中使用此.Open()方法调用存储过程时,Microsoft SQL可以正常执行,而Oracle则不能。下面是一段代码: Private moRs As ADORecordSetHelper = New ADORecordSetHelper("") Private moCmd As DbCommand 'where moCmd has the procedure cal
Private moRs As ADORecordSetHelper = New ADORecordSetHelper("")
Private moCmd As DbCommand 'where moCmd has the procedure call and parameters
moRs.Open(moCmd)
下面是.Open()的定义
这一切都适用于Microsoft SQL,但不适用于Oracle。我发现execute moCmd.ExecuteNonQuery()可以执行存储过程,但因此我需要在某些实例中获取记录集
有没有一种方法可以同时为Microsoft和Oracle使用moRs.Open(moCmd)?如果没有,我如何才能完成同样的任务,找回记录集
更新:我发现.Open()方法使用的是Execute Reader,它对于严格返回记录集的Microsoft SQL来说运行良好。Oracle存储过程正在插入行并从该过程返回值。在同一个对象上执行Execute-NonQuery(moCmd)执行得很好,但是我能从这个方法中得到的只是受影响的行数,而不是我需要的其他信息。关于为什么Execute Reader不工作的思考?我的搜索表明它应该适用于所有类型的SQL;插入、删除、更新等。嗯,我个人会把数据层全部去掉,然后使用.net。这只会给你带来麻烦。不过这可能会对你有所帮助,@TonyHopkinson我同意。真的,程序应该重写,但是没有时间了。实际上,您发送给我的链接是我用来从VB6升级到.Net的应用程序。帮不了我什么忙,现在不是时候。。。我对此有一个固定的答复。“永远没有足够的时间把它做好,但总是有足够的时间再做一次”。该代码是否与直接sql一起工作,如果是,可能是exec my_sp。。。我会做的。
Public Sub Open(command As System.Data.Common.DbCommand)
Member of UpgradeHelpers.DB.ADO.ADORecordSetHelper