mvc調用mysql存儲過程_使用.NET MVC +EF調用oracle的存儲過程

題記:

需求如題,在網上搜索了一下,沒有特別貼合我需求的資料,只好自己摸索,東拼西湊了解了一點東西慢慢嘗試做了出來。

難點:.NET是微軟產品,主要支持Sql Server數據庫,對于Oracle的數據庫的資料比較少。

思路:

EF框架是DataBase First ,先在數據庫創建存儲過程并測試能夠執行。在系統中,通過調用SqlQuery方法來執行存儲過程。【EF的SqlQuery使用教程】

封裝一個執行存儲過程的方法,

#region 調用存儲過程返回一個指定的TResult

public List RunProc(string sql, params object[] pamrs)

{

return db.Database.SqlQuery(sql, pamrs).ToList();

}

#endregion

參數sql為執行存儲過程的sql語句,在oracle數據庫中為

begin 存儲過程名稱(參數1,參數2,……);end;

參數pamrs為Oracle.ManagedDataAccess.Client.OracleParameter類型的數組【OracleParameter的教程】,需要引用的dll為Oracle.ManagedDataAccess.dll,可以通過NuGet包添加。

最后根據輸出參數的值判斷是否成功調用存儲過程。

PS:可以用try catch來捕獲異常并輸出

代碼:

public ResultModelProExecute()

{try{//參數數列

List parameters = new List();//輸入參數

parameters.Add(new OracleParameter("exeno", DateTime.Now.ToString("yyyyMMddHHmmss")));

parameters.Add(new OracleParameter("exetype", "手動"));//輸出參數

var para_exeid = new OracleParameter("exeid", OracleDbType.Int32);

para_exeid.Direction=System.Data.ParameterDirection.Output;

parameters.Add(para_exeid);//執行存儲過程

var list = RunProc(@"begin pro_charges_execute(:exeno,:exetype,:exeid);end;", parameters.ToArray());//獲取輸出參數的值

var rowid = Convert.ToInt32(parameters[2].Value.ToString());if (rowid > 0)

{return new ResultModel() { errcode = 0, errmsg =Lang.Filed_Common_OperSuccess };

}else{return new ResultModel() { errcode = 1, errmsg =Lang.ErrMsg_Common_OperationFailed };

}

}catch(Exception ex)

{return new ResultModel() { errcode = 1, errmsg =ex.Message };

}

}

要點:

一開始調用語句為RunProc(),返回報錯

數據讀取器具有多個字段。多個字段對于存儲過程中的EDM原語或枚舉類型無效(數據讀取器具有多個字段。多個字段對于EDM原語或存儲過程中的枚舉類型無效)

這是由于int為值類型,不與存儲過程的返回的模型匹配。重新建立了一個ViewModel作為返回類型。

public classCharges_ExelogParameter

{public string exetype { get; set; }public string exeno { get; set; }public int exeid { get; set; }

}

附記:

順便列出不是用EF框架時,.NET調用存儲過程的方法。

這次使用的是DBHelperOra幫助類,同時也要引用Oracle.ManagedDataAccess.dll。

下面是DBHelperOra里我們需要用到的方法。

public static void RunProcedureNoReturn(stringstoredProcName, IDataParameter[] parameters)

{using (OracleConnection connection = newOracleConnection(connectionString))

{

connection.Open();

OracleCommand command=BuildQueryCommand(connection, storedProcName, parameters);

command.ExecuteNonQuery();

connection.Close();

}

}

邏輯類似,聲明參數變量后直接調用RunProcedureNoReturn去執行存儲過程。

public int UpdateTagMember(int tagid,stringuserid)

{

IDataParameter[] para= new IDataParameter[2];

para[0] = new OracleParameter("@USERID", userid);

para[1] = new OracleParameter("@TAGID", OracleDbType.Int32, tagid,ParameterDirection.InputOutput);

DBHelperOra.RunProcedureNoReturn("PRO_TAGMEMBER_UPDATE", para);return para[1].Value.ObjToInt();

}

參考:https://www.cnblogs.com/lizichao1991/p/6867331.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270595.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle12c:安裝后新建用戶及其默認表空間,并創建表測試

環境:操作系統:Windows Server2008 R2 X64 Oracle版本:12c 如何安裝? -- oracle 12c在oracle linux 6.6 x64上的安裝 -- Windows x64位下完美安裝winx64_oracle_12c_database 如何使用DataBase Cofiguration Assistant 創建數據庫…

數據庫:Redis相關知識梳理

1、數據類型string(字符串):最基本的k-v存儲 ,適合驗證碼、配置信息等list(列表):適合有序/固定的列表。比如行政區、字典表、消息隊列等。set(集合):支持交集…

python線性回歸分析看相關性_機器學習入門-相關分析之簡單線性回歸

一.什么是機器學習?簡單來說,機器學習是一類算法的總稱,這些算法企圖從大量歷史數據中挖掘出其中隱含的規律,并用于預測或者分類,更具體的說,機器學習可以看作是尋找一個函數,輸入是樣本數據&am…

Android Listview 性能優化

首先我一般使用的適配器是BaseAdapter,其中有兩個方法最主要,分別是: getCount,getView,在對Listview 進行優化的時候,首先使用 convertview 和viewHolder 配合進行優化,使用convertview的母的是控件復用,從而加到減少內存的使用,使用viewHolder 的是減少findbyid 的次數.但是在…

前端:JS實現數組去重常用的六種方法介紹

今天給大家分享JS實現數組去重常用的六種方法&#xff0c;希望對大家能有所幫助&#xff01;定義變量let arr [20,6,13,20,100,8,13,11]; let newArr [];1、兩層循環去重 for(let i 0;i < arr.length;i){for(let j i 1;j < arr.length;j){if(arr[i] arr[j]){arr.sp…

python自定義colorbar_python可視化 matplotlib畫圖使用colorbar工具自定義顏色

python matplotlib畫圖使用colorbar工具自定義顏色 colorbar(draw colorbar without any mapple/plot)自定義colorbar可以畫出任何自己想要的colorbar&#xff0c;自由自在、不受約束&#xff0c;不依賴于任何已有的圖(plot/mappable)。這里使用的是mpl.colorbar.ColorbarBase類…

不能讀取文件“itunes.library.itl”因為它是由更高級別的itunes所創建的

轉自&#xff1a;https://zhidao.baidu.com/question/80796363.html 是因為你安裝過高版本的后又裝你版本的itunes. 你在電腦上搜索所有硬盤上的itunes library.itl這個文件.搜到就刪了&#xff0c;而且搜索里選擇“高級選項”除了區分大小寫其它幾個都鉤上。這樣注消下&#x…

路由器:什么是軟路由,看完本篇文章你就懂了

今天小編給大家介紹一下軟路由具體是什么&#xff0c;有什么實際用途&#xff0c;看完本篇你就懂了&#xff01; 一、軟路由與硬路由概念介紹 硬路由&#xff1a;目前我們家里普遍使用的路由器&#xff0c;有廠家提供整體的解決方案&#xff0c;包括處理器、電源供應、嵌入式軟…

c#form+mysql儲存讀取圖片_C#從SQL server數據庫中讀取l圖片和存入圖片

本實例主要介紹如何將圖片存入數據庫。將圖片存入數據庫,首先要在數據庫中建立一張表,將存儲圖片的字段類型設為Image類型,用FileStream類、BinaryReader把圖片讀成字節的形式,賦給一個字節數組,然后用ADO.SqlCommand對象的ExecuteNonQuery()方法來把數據保存到數據庫中。主要代…

if...else..的錯誤用法

1.最近在寫js代碼完成一個前段DOM操作的函數時&#xff0c;自己錯誤的使用了if..else..控制體。為什么是錯誤的呢&#xff1f;看看我的 代碼你就明白了&#xff1a; 1 document.getElementsByClassName(eButton)[0].οnclickfunction(){2 var checkeddocument.getElementsB…

Git服務器報錯:host key for (ip地址) has changed and you have requested strict checking

一:報錯提示 如下&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key …

軟件:常用 Linux 軟件匯總,值得收藏

目錄 1、音頻軟件 2、聊天軟件 3、數據備份與恢復 4、桌面個性化工具 5、開發必備 6、 電子書工具 7、 編輯器軟件 8、教育軟件 9、電子郵件軟件 10、文件管理器 11、娛樂游戲 12、 圖形工具 13、互聯網瀏覽 14、 辦公效率工具 15、 生產力效率工具 16、 安全防護 17、文件共享…

java上下文即ServletContext

上下文即ServletContext,是一個全du局的儲存信zhi息的空間&#xff0c;服務器啟動&#xff0c;其就dao存zhuan在&#xff0c;服務器關閉&#xff0c;其才釋放。 所有用戶共用一個ServletContext。所以&#xff0c;為了節省空間&#xff0c;提高效率&#xff0c;ServletContext中…

數據幀,數據包,報文段,報文,分組,數據包的概念和區別

應用層——消息傳輸層——數據段(segment)網絡層——分組、數據包&#xff08;packet&#xff09;鏈路層——幀&#xff08;frame&#xff09;物理層——P-PDU&#xff08;bit&#xff09;分組、包&#xff0c;packet&#xff0c;信息在互聯網當中傳輸的單元&#xff0c;網絡層…

python開源自動化測試平臺_8款開源自動化測試框架,速速收藏

原標題&#xff1a;8款開源自動化測試框架&#xff0c;速速收藏來源&#xff1a;http://www.51testing.com/近年來&#xff0c; 自動化測試越來越熱門&#xff0c;該領域新的挑戰和機遇也在同步產生&#xff0c;尤其是AI&#xff0c;RPA和機器學習&#xff0c;可以預見會在幾年…

SpringBoot集成Redis用法筆記

今天給大家整理一下SpringBoot集成Redis用法筆記&#xff0c;希望對大家能有所幫助&#xff01;一、Redis優點介紹1、速度快不需要等待磁盤的IO&#xff0c;在內存之間進行的數據存儲和查詢&#xff0c;速度非常快。當然&#xff0c;緩存的數據總量不能太大&#xff0c;因為受到…

tomcat和servlet的關系

tomcat和servlet的關系 Tomcat 是Web應用服務器,是一個Servlet/JSP容器. Tomcat 作為Servlet容器,負責處理客戶請求,把請求傳送給Servlet,并將Servlet的響應傳送回給客戶.而Servlet是一種運行在支持Java語言的服務器上的組件. Servlet最常見的用途是擴展Java Web服務器功能,提…

Linux常用遠程連接工具介紹,總有一款適合你

目錄 1、xshell 2、winscp 3、PuTTY 4、MobaXterm 5、FinalShell 今天給大家推薦Linux常用遠程連接工具&#xff0c;希望對大家能有所幫助&#xff01; 1、xshell 介紹&#xff1a; xshell是一個非常強大的安全終端模擬軟件&#xff0c;它支持SSH1, SSH2, 以及Windows平臺的TEL…

python高性能寫法_py 高性能低級,高級寫法思考

這里所謂的低級&#xff0c;高級是指封裝抽象的程度。低級指os.fork()高級是指 multiprocessing包一般根據業務需求&#xff0c;一個主進程負責維護接收&#xff0c; 不同的子進程處理不同的需求。根據各同需求組合多進程多線程多進程&#xff0b;多線程協程也可基于uvloop事件…