Daniel Rabinovits

Daniel Rabinovits

  • NA
  • 34
  • 7.7k

Running an oracle stored procedure in c#

Feb 5 2020 10:37 AM
I am trying to run an oracle stored procedure with 2 input parameters and a sys_ref cursor as a return parameter (parameter3).
 
I am trying to parse the cursor data into an excel spreadsheet.
 
There is no datatype for return cursor.
 
How do I do this:
  1. private void button2_Click(object sender, EventArgs e)  
  2. {  
  3. int i = 0;  
  4. int j = 0;  
  5. string data = null;  
  6. var conn = new OdbcConnection();  
  7. conn.ConnectionString = @"DSN=ABCD;" +  
  8. "Uid=ABCD;" +  
  9. "Pwd=*******";  
  10. var odbcCommand = conn.CreateCommand();  
  11. OdbcParameter ODBCParameter1 = new OdbcParameter("@FROMDATE", OdbcType.VarChar, 30);  
  12. ODBCParameter1.Value = "01/28/2020";  
  13. ODBCParameter1.Direction = ParameterDirection.Input;  
  14. OdbcParameter ODBCParameter2 = new OdbcParameter("@TODATE", OdbcType.VarChar, 30);  
  15. ODBCParameter2.Value = "01/29/2020";  
  16. ODBCParameter2.Direction = ParameterDirection.Input;  
  17. OdbcParameter ODBCParameter3 = new OdbcParameter("@SYS_REFCURSOR", OdbcType.  
  18. OdbcParameter ODBCParameter3 = new OdbcParameter("@sys_ref", OdbcType.VarChar, 300);  
  19. ODBCParameter3.Direction = ParameterDirection.Output;  
  20. OdbcCommand odbcCommand = new OdbcCommand("GETREPORT", conn);  
  21. odbcCommand.CommandType = CommandType.StoredProcedure;  
  22. odbcCommand.Parameters.Add(ODBCParameter1);  
  23. odbcCommand.Parameters.Add(ODBCParameter2);  
  24. OdbcDataAdapter da = new OdbcDataAdapter(odbcCommand);  
  25. conn.Open();  
  26. DataSet ds = new DataSet();  
  27. da.Fill(ds);  
  28. Excel._Application xlApp;  
  29. Excel.Workbook xlWorkBook;  
  30. Excel.Worksheet xlWorkSheet;  
  31. object misValue = System.Reflection.Missing.Value;  
  32. xlApp = new Excel.Application();  
  33. xlWorkBook = xlApp.Workbooks.Add(misValue);  
  34. xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);  
  35. MessageBox.Show(ds.Tables[0].Rows.Count.ToString());  
  36. for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)  
  37. {  
  38. for (j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)  
  39. {  
  40. data = ds.Tables[0].Rows[i].ItemArray[j].ToString();  
  41. xlWorkSheet.Cells[i + 1, j + 1] = data;  
  42. }  
  43. }  
  44. conn.Close();  
  45. xlWorkBook.SaveAs("testing.xls", Excel.XlFileFormat.xlWorkbookDefault);  
  46. xlWorkBook.Close(true, misValue, misValue);  
  47. xlApp.Quit();  
  48. da.Dispose();  
  49. conn.Close();  
  50. MessageBox.Show("Excel File Created");  
  51. }  
The stored procedure is as follows:
  1. create or replace PROCEDURE GETREPORT  
  2. (  
  3. FROMDATE IN VARCHAR2,  
  4. TODATE IN VARCHAR2,  
  5. p_recordset OUT SYS_REFCURSOR  
  6. AS  
  7. BEGIN  
  8. OPEN p_recordset FOR  
  9. SELECT d.materialcode, m.itemdesc, sum(d.quantity)  
  10. FROM tbldispensed d LEFT OUTER JOIN tblmasterinventory m ON m.materialcode = d.materialcode  
  11. WHERE TO_DATE(d.datedispensed, 'yy/mm/dd'BETWEEN TO_DATE(FROMDATE, 'mm/dd/yyyy')  
  12. AND TO_DATE(TODATE, 'mm/dd/yyyy')  
  13. GROUP BY d.materialcode, m.itemdesc;  
  14. END GETREPORT;  

Answers (1)