日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mvc调用mysql存储过程_使用.NET MVC +EF调用oracle的存储过程

發布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的mvc调用mysql存储过程_使用.NET MVC +EF调用oracle的存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。