我剛開始閱讀關於存儲過程。任何人都可以請幫助我在C#中的oracle中調用存儲過程?從C#調用Oracle存儲過程?
回答
請訪問此ODP網站微軟OracleClient的開發人員成立了由甲骨文: http://www.oracle.com/technetwork/topics/dotnet/index-085703.html
而且下面是一個示例代碼,可以讓你開始稱從C#的存儲過程到Oracle。 PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT是建立在Oracle接受參數PUNIT,POFFICE,PRECEIPT_NBR並在T_CURSOR中返回結果的存儲過程。
using Oracle.DataAccess;
using Oracle.DataAccess.Client;
public DataTable GetHeader_BySproc(string unit, string office, string receiptno)
{
using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString()))
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.InitialLONGFetchSize = 1000;
cmd.CommandText = DatabaseHelper.GetDBOwner() + "PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("PUNIT", OracleDbType.Char).Value = unit;
cmd.Parameters.Add("POFFICE", OracleDbType.Char).Value = office;
cmd.Parameters.Add("PRECEIPT_NBR", OracleDbType.Int32).Value = receiptno;
cmd.Parameters.Add("T_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
爲什麼'InitialLONGFetchSize = 1000'首選?從DOCS '默認= 0. 將此屬性設置爲0會將LONG和LONG RAW數據全部檢索到,直到應用程序明確請求它爲止。# – KLIM8D 2015-10-01 07:32:57
它基本上是相同的機制作爲與非查詢命令:
- command.CommandText =的 存儲過程的名稱
- command.CommandType =
CommandType.StoredProcedure
- 儘可能多地調用command.Parameters.Add作爲sp要求的參數數量
- command.ExecuteNonQuery
有很多的例子在那裏,由谷歌返回的第一個是this one
還有你可能會陷入一個小陷阱,如果你的SP是一個函數,你的返回值參數必須首先在參數收集
在.NET中通過4.0版本可以做到這一點的方法相同的SQL Server存儲的特效,但請注意,您需要:
using System.Data.OracleClient;
有some system requirements here,你應該驗證您的方案都行。
微軟是deprecating this namespace as of .Net 4所以未來需要第三方提供商。考慮到這一點,你可能會更好地使用Oracle Data Provider for .Net(ODP.NET)這個詞,它具有不屬於Microsoft類的優化。還有其他的第三方選擇,但甲骨文在保持.Net開發者的權利方面有強烈的既得利益,所以他們應該是好的。
我現在得到的步驟需要從C#
//GIVE PROCEDURE NAME
cmd = new OracleCommand("PROCEDURE_NAME", con);
cmd.CommandType = CommandType.StoredProcedure;
//ASSIGN PARAMETERS TO BE PASSED
cmd.Parameters.Add("PARAM1",OracleDbType.Varchar2).Value = VAL1;
cmd.Parameters.Add("PARAM2",OracleDbType.Varchar2).Value = VAL2;
//THIS PARAMETER MAY BE USED TO RETURN RESULT OF PROCEDURE CALL
cmd.Parameters.Add("vSUCCESS", OracleDbType.Varchar2, 1);
cmd.Parameters["vSUCCESS"].Direction = ParameterDirection.Output;
//USE THIS PARAMETER CASE CURSOR IS RETURNED FROM PROCEDURE
cmd.Parameters.Add("vCHASSIS_RESULT",OracleDbType.RefCursor,ParameterDirection.InputOutput);
//CALL PROCEDURE
con.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
cmd.ExecuteNonQuery();
//RETURN VALUE
if (cmd.Parameters["vSUCCESS"].Value.ToString().Equals("T"))
{
//YOUR CODE
}
//OR
//IN CASE CURSOR IS TO BE USED, STORE IT IN DATATABLE
con.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(dt);
希望調用程序這有助於
您能告訴我OracleDataAdapter da = new OracleDataAdatper(cmd );'是?這條線是否需要? – AlbatrossCafe 2015-08-14 16:26:20
此代碼的工作很適合我調用Oracle存儲過程
通過添加引用右鍵單擊解決方案資源管理器中的項目名稱>添加引用> .Net,然後添加名稱空間。
using System.Data.OracleClient;
using System.Data;
然後將此代碼粘貼在事件處理程序
string str = "User ID=username;Password=password;Data Source=Test";
OracleConnection conn = new OracleConnection(str);
OracleCommand cmd = new OracleCommand("stored_procedure_name", conn);
cmd.CommandType = CommandType.StoredProcedure;
--Ad parameter list--
cmd.Parameters.Add("parameter_name", "varchar2").Value = value;
....
conn.Open();
cmd.ExecuteNonQuery();
而且其完成了...快樂與C#
- 1. 從另一個存儲過程調用存儲過程oracle
- 2. 調用Oracle存儲過程
- 3. 從C調用Oracle中的存儲過程調用#
- 4. 從ASP.NET調用Oracle存儲過程
- 5. Oracle APEX:從javascript調用存儲過程
- 6. 從Oracle存儲過程調用os_command.exec
- 7. 從Excel調用oracle存儲過程 - VBA
- 8. 從Java調用Oracle存儲過程
- 9. 從Oracle調用SSRS存儲過程
- 10. 從SAS調用Oracle存儲過程
- 11. 從java調用oracle存儲過程
- 12. 從Spotfire調用Oracle存儲過程
- 13. 從Java調用Oracle存儲過程
- 14. 從VBA調用Oracle存儲過程ADODB
- 15. 調度存儲過程「ORACLE」
- 16. 從C#調用Oracle存儲過程的問題#
- 17. 調用存儲過程中的「out」ref_cursor的Oracle存儲過程
- 18. 使用Hibernate調用Oracle存儲過程?
- 19. 用MyBatis調用Oracle存儲過程
- 20. 調用Oracle存儲過程使用createNativeQuery
- 21. 不能從c調用存儲過程#
- 22. 如何從另一個存儲過程調用存儲過程oracle
- 23. Oracle:調用包中的存儲過程
- 24. Oracle存儲過程調用由PHP
- 25. 在Oracle中調用存儲過程
- 26. 調用oracle存儲過程表COGNOS
- 27. 如何調用Oracle存儲過程
- 28. 在servlet中調用oracle存儲過程
- 29. 使用Toad調試Oracle存儲過程
- 30. oracle中調用存儲過程select
你能後的存儲過程編碼?你用什麼庫來連接數據庫? ADO.NET?一個ORM(nHibernate,EF)?如果你想得到滿足你需求的答案,你需要提供更多的細節。 – Oded 2010-10-15 08:24:52
如果您希望獲得Oracle特定的答案,請將您的問題標記爲Oracle。謝謝 ! – tsimbalar 2010-10-15 08:26:00
我以前使用過基本的SQL查詢。但是,現在我想用已經編寫的Oracle程序,使用C#代碼。 – Rohan 2010-10-15 10:18:40