ef mysql 儲存過程 EF 儲存過程

2021-10-17 16:23:59 字數 3002 閱讀 1020

one:理論

a:定義

儲存過程(stored procedure)是一組為了完成特定功能的sql語句集合,經編譯後儲存在伺服器端的資料庫中,利用儲存過程可以加速sql語句的執行。

儲存過程分為系統儲存過程和自定義儲存過程。

1.系統儲存過程在master資料庫中,但是在其他的資料庫中可以直接呼叫,並且在呼叫時不必在儲存過程前加上資料庫名,因為在建立乙個新資料庫時,系統儲存過程

在新的資料庫中會自動建立

2.自定義儲存過程,由使用者建立並能完成某一特定功能的儲存過程,儲存過程既可以有引數又有返回值,但是它與函式不同,儲存過程的返回值只是指明執行是否成功,

並不能像函式那樣被直接呼叫,只能利用execute來執行儲存過程。

b:優點

1.提高應用程式的通用性和可移植性:儲存過程建立後,可以在程式中被多次呼叫,而不必重新編寫該儲存過程的sql語句。並且資料庫專業人員可以隨時對儲存過程進行

修改,且對程式源**沒有影響,這樣就極大的提高了程式的可移植性。

2.可以更有效的管理使用者運算元據庫的許可權:在sql server資料庫中,系統管理員可以通過對執行某一儲存過程的許可權進行限制,從而實現對相應的資料訪問進行控制,

避免非授權使用者對資料庫的訪問,保證資料的安全。

3.可以提高sql的速度,儲存過程是編譯過的,如果某乙個操作包含大量的sql**或分別被執行多次,那麼使用儲存過程比直接使用單條sql語句執行速度快的多。

4.減輕伺服器的負擔:當使用者的操作是針對資料庫物件的操作時,如果使用單條呼叫的方式,那麼網路上還必須傳輸大量的sql語句,如果使用儲存過程,

則直接傳送過程的呼叫命令即可,降低了網路的負擔。

c:語法

sql server儲存過程語法:

create procedure 過程名

@parameter 引數型別

@parameter 引數型別

。。。asbegin

end執行儲存過程:execute 過程名

two:應用

a:資料庫儲存

--查詢不帶引數的儲存過程

alter procedure [dbo].[getuser]asbegin

select theserialnumber, userid, username, userset,

userphone, work.userworktype,details.workdetailssituation,

[level].userleverltype,[type].usertype, usercreationtime, hobby.userhobbyfrom[user]

inner join work on work.userworkid=[user].userworkid

inner join [level] on [level].userlevelid=[user].userlevelid

inner join usertypeas [type] on [type].usertypeid=[user].usertypeid

inner join workdetailsas details on details.workdetailsid=work.workdetailsid

inner join userhobbyas hobby on hobby.userhobbyid=[user].userhobbyid

end--查詢帶引數的儲存過程

alter procedure [dbo].[getuserid]--建立儲存過程名

@userid varchar(50) --引數asbeginselect * from [user] where userid=@userid --命令列或者命令塊

endb:專案程式

//根據提供的strsql語句 訪問資料庫,返回list集合

public list getdataset(stringstrsql)

connection();tryreturnlist;

}catch(exception)

catch(exception ex)

///執行返回dataset的查詢/// 儲存過程名稱

/// 儲存過程引數

public static dataset getdatasetbyproc(string procname, paramsidataparameter parameters)

connection();

dataset ds= newdataset();

sqlcommand cmd= newsqlcommand();trycatch(exception ex)

catch(exception e)

console.write(sqlstr+ ",sql異常:" +e.message);

}finallyreturndt;#endregion}

c:呼叫

//、、、、、、、、儲存過程、、、、、、、、、//查詢全部

public static listgetuser()

{return db.getdataset("getuser");

///根據條件查詢///

/// 引數

public static datatable getuserid(stringuserid)

sqlparameter parameters={new sqlparameter("@userid",sqldbtype.varchar,50)

parameters[0].value =userid;return dbbase.getdatatablebyproc("getuserid", parameters);

//儲存過程

list u =dal.family.getuser();

datatable d= dal.family.getuserid("2020020901494949");for (int i = 0; i < d.rows.count; i++)

{foreach (datarow dr ind.rows)

{var id = dr["userid"].tostring();

EF 呼叫儲存過程

1.執行返回表型別的儲存過程 主表從表資料一起關聯查詢 alter proc dbo getcategory cidint asbegin select fromcategories where cid cid end 執行此儲存過程的 如下 public ienumerablegetcategor...

EF呼叫儲存過程

1 無引數查詢 var model db.database.sqlquery select from userinfoes tolist 2 有參查詢 var model db.database.sqlquery select from userinfoes where id id new sqlp...

EF框架呼叫儲存過程

新到的公司專案用ef mvc,開始接觸,遇到很多挫折,由於資料庫設計原因,很多地方都要用檢視 儲存過程來實現一些需求。呼叫儲存過程遇到了好多問題,這邊記錄一下幾種呼叫方式,及遇到的問題的解決方式。儲存過程 alter procedure sp name param1 int,param2 int,p...