国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

EF和LINQ 調(diào)用存儲(chǔ)過程

2019-11-17 02:17:33
字體:
供稿:網(wǎng)友

EF和LINQ 調(diào)用存儲(chǔ)過程

好久沒有更新文章了,最近項(xiàng)目比較忙都沒什么時(shí)間來分享最近的問題。今天遇到一個(gè)超級傻逼的問題。C#中調(diào)用存儲(chǔ)過程,自己code也10來年了,這應(yīng)該是很簡單的問題了。今天有2個(gè)新的api,一個(gè)只有1個(gè)參數(shù),一個(gè)有10多個(gè)參數(shù),先前沒有注意到對象類型,以為是EF的DbContext,結(jié)果后來才發(fā)現(xiàn)是LINQ的DataContext對象。以前調(diào)用存儲(chǔ)過程都是靠設(shè)計(jì)界面封裝成方法。 現(xiàn)在designer界面有500多張表, 幾年沒有維護(hù)了,大家要修改什么東東都是直接改代碼。所以這里以后臺(tái)代碼調(diào)用存儲(chǔ)過程為例。

EF調(diào)用存儲(chǔ)過程

  using (AdventureWorks2014Entities aw=new AdventureWorks2014Entities())            {                int ret = aw.Database.ExecuteSqlCommand("EXEC [HumanResources].[uspUpdateEmployeeLogin] @BusinessEntityID,@OrganizationNode,@LoginID,@JobTitle,@HireDate,@CurrentFlag ",                    new SqlParameter("@BusinessEntityID",10),                    new SqlParameter("OrganizationNode",DBNull.Value),                    new SqlParameter("LoginID", @"adventure-works/michael6"),                    new SqlParameter("JobTitle", "Research and Development Manager23"),                    new SqlParameter("HireDate", DateTime.Now),                    new SqlParameter("CurrentFlag",true)                    );            }

注意這里的ExecuteSqlCommand第一個(gè)參數(shù)是字符串,這個(gè)字符串必須包含參數(shù),如這里的@BusinessEntityID,其次這里的SqlParameter里面的參數(shù)名是可以包含@符號也可以不包含。

LINQ調(diào)用存儲(chǔ)過程

  using (AWDataClassesDataContext aw=new AWDataClassesDataContext())            {                int BusinessEntityID=10;                string OrganizationNode = null; //0x5AE178                string LoginID=@"adventure-works/michael6";                string JobTitle="Research and Development Manager12";                DateTime HireDate=DateTime.Now;                bool CurrentFlag=true;                string sql = string.Format(" EXEC [HumanResources].[uspUpdateEmployeeLogin] @BusinessEntityID={0},@OrganizationNode={1},@LoginID=N'{2}',@JobTitle=N'{3}',@HireDate=N'{4}',@CurrentFlag=N'{5}'"                    , BusinessEntityID.ToString(), "NULL", LoginID.ToString(), JobTitle.ToString(), HireDate.ToString(), CurrentFlag.ToString());                var ret = aw.ExecuteCommand(sql);                //var ret=aw.ExecuteCommand("EXEC [HumanResources].[uspUpdateEmployeeLogin] @BusinessEntityID={0},@OrganizationNode={1},@LoginID={2},@JobTitle={3},@HireDate={4},@CurrentFlag={5}"                //    , BusinessEntityID, null, LoginID, JobTitle, HireDate, CurrentFlag);             } 
ExecuteCommand方法的后面?zhèn)髦档膮?shù)不能是object對象,所以我這里只能拼接SQL字符串。 大家可能注意到這里調(diào)用存儲(chǔ)過程與普通的sql語句沒什么區(qū)別,只不過它的sql是調(diào)用存儲(chǔ)過程如:EXEC [HumanResources].[uspUpdateEmployeeLogin] @BusinessEntityID=10,@OrganizationNode=NULL,@LoginID=N'adventure-works/michael6',@JobTitle=N'Research and Development Manager',@HireDate=N'2015/6/29 22:30:15',@CurrentFlag=N'True'這樣的sql語句是比較危險(xiǎn)的(可能有sql注入)。如果參數(shù)可能為Null,那么sql語句 還得動(dòng)態(tài)拼接,比new SqlParameter("OrganizationNode",DBNull.Value)這種寫法麻煩多了。我用反編譯工具并沒有看到DataContext里面的具體實(shí)現(xiàn)。看來LINQ to SQL真的是該淘汰了。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎右旗| 白银市| 光山县| 贵溪市| 南漳县| 那坡县| 崇阳县| 常山县| 临桂县| 尼勒克县| 偃师市| 富民县| 沿河| 襄樊市| 都昌县| 晋中市| 永昌县| 凉山| 丰都县| 广东省| 太仓市| 岫岩| 宁都县| 农安县| 钟祥市| 宜宾市| 新巴尔虎左旗| 合山市| 姚安县| 阳原县| 乐安县| 广东省| 峡江县| 昌乐县| 霍邱县| 柳林县| 色达县| 桑植县| 新巴尔虎右旗| 西丰县| 平安县|