1. 程式人生 > >【C#】機房重構-下機+儲存過程

【C#】機房重構-下機+儲存過程

前言

       在做機房的時候一定要先考慮好,該功能要和資料庫中那個表打交道,把各種因素都考慮進去,可是每次都考慮的不是很全怎麼辦呢? 那沒關係,只要自己做了思考,以後修改起來就會很方便!先看一下下機的流程圖吧!
在這裡插入圖片描述

思考

經過自己整理一遍思路,發現要實現這個功能會查到很多表,重複的很多,這樣會使D層的程式碼增加很多,於是就有了儲存過程!

官話:儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件。

個人理解:是一個存有很多SQL語句的容器,如果需要使用的話,直接呼叫,如果儲存過程中有引數,一定要先賦值。可以一次完成多種操作!

實戰:刪除上機表中的使用者,向下機表中插入該使用者,更新使用者表中的餘額。 這三次操作可以放在一起執行吧!那就先建立一個儲存過程吧!

-- =============================================
-- Author:		<閆偉強>
-- Create date: <2018/09/25>
-- Description:	<下機>
-- =============================================
ALTER PROCEDURE [dbo].[proc_Query] 
	-- Add the parameters for the stored procedure here
	@DbName nvarchar(50),
	@comboZD1 nvarchar(20),
	@comboZD2 nvarchar(20),
	@comboZD3 nvarchar(20),
	@comboCZ1 nvarchar(10),
	@comboCZ2 nvarchar(10),
	@comboCZ3 nvarchar(10),
	@text1 nvarchar(10),
	@text2 nvarchar(10),
	@text3 nvarchar(10),
	@comboGX1 nvarchar(5),
	@comboGX2 nvarchar(5)
AS
DECLARE @txtSQL varchar(500)
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	set @txtSQL='select * from' 
[email protected]
+'where'+char(32)[email protected][email protected]+char(39)[email protected]+char(39) if(@comboGX1!=null) begin set @[email protected]+char(32)[email protected]+char(32)[email protected][email protected]+char(39)[email protected]+char(39) if(@comboGX2!=null) begin set @
[email protected]
+char(32)[email protected]+char(32)[email protected][email protected]+char(39)[email protected]+char(39) end end execute(@txtSQL) END
建立完成之後需要的時候在D層使用,程式碼如下:
public DataTable CunChu(LineInfo Line,decimal money)
        {
            sqlHelper sqlhelper = new sqlHelper();
            SqlParameter[] sqlparams = { new SqlParameter("@ID", Line.ID),
                                         new SqlParameter("@Name",Line.Name),
                                         new SqlParameter("@Monetary",money),
                                         new SqlParameter("@OnDateTime",Line.OnDateTime),
                                         new SqlParameter("@OffDateTime",Line.OffDateTime),
                                         new SqlParameter("@Type",Line.Type),
                                         new SqlParameter("@Computer",Line.Computer)};
            string procname = "Pro_Offline";
            DataTable table = sqlhelper.ExecuteQuery(procname, sqlparams, CommandType.StoredProcedure);
            return table;
        }

優缺點

儲存過程能讓你更方便,那它就有它的弊端

優點:

  • 一次性編譯
  • 可以重複使用
  • 模組化
  • 減少D層的程式碼量
  • 執行的速度快

不足

  • 可移植性查
  • 程式碼可讀性差,難維護
  • 如果資料庫損壞,將是一個巨大的損失

總結

       既然學習了這麼多,就要學以致用,理論達到了,就要著手實踐,要不永遠都是假把式。

相關推薦

C#機房重構-下機+儲存過程

前言        在做機房的時候一定要先考慮好,該功能要和資料庫中那個表打交道,把各種因素都考慮進去,可是每次都考慮的不是很全怎麼辦呢? 那沒關係,只要自己做了思考,以後修改起來就會很方便!先看一下下機的流程圖吧! 思考 經過自己整理一遍思路,發現要實現這

C#機房重構之七層登陸

what? 實體層(Entity):主要是用來封裝一些功能性程式碼,定義實體型別和實體集合,用於各層次傳遞引數 資料訪問層(DAL):提供基本的資料訪問,該層將有關資料庫的操作放在單獨的一個類中,針對資料的增刪改查 介面層(IDAL):定義一個統一的介面,解除B層

mybatismybatis呼叫sqlserver儲存過程和表值函式

儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc

MysqlMySQL 使用者執行儲存過程的許可權

問題 執行儲存過程報錯: 原因 查詢資料: 1305錯誤,由於當前使用者沒用許可權,對使用者進行授權後可以執行。 解決 alter routine---修改與刪除儲存過程/函式 create routine--建立儲存過程/函式 execute--呼叫

Oracle帶引數的儲存過程

1、建立儲存過程 create procedure updatedemo (ageparam IN number) as begin update demo set age = ageparam; commit; end; / 2、傳參執行

Java如何呼叫MySQL儲存過程

Java呼叫MySQL的儲存過程,需要用JDBC連線,環境eclipse 首先檢視MySQL中的資料庫的儲存過程,接著編寫程式碼呼叫 mysql> show procedure status; +------+-------------+-----------+-

JDBC②JDBC 直接呼叫儲存過程

1. 使用 JDBC API 直接呼叫儲存過程 Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 語言訪問關係資料庫的基於標準的首要機制,提供了對資料庫訪問和快取管理的直接控制。 JDBC 中的 Callabl

C#報表制作&lt;機房重構&gt;

接下來 機房 工具 學習 test trac fcm 報表 感覺 前言 和VB須要引用其它報表軟件不同,VS自帶報表設計的功能,初次嘗試。就感受到了它的強大之處。 報表制作 話不多說。直接報表的制作過程。 1、首先,我們要先制作一個報表的

C#單例模式&lt;機房重構&gt;

機房 .sh 不能 是否 gist 應用 調用方法 單例模式 sender 前言 在機房重構之前。我們學習了設計模式。在這次重構中,我們的任務就是將這些模式,加入到機房的重構中去。如今先來解決一個最簡單的問題——窗口的超生。 假設不加以限

資料庫視訊第九章 儲存過程

一、儲存過程概述 是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中。儲存過程可包含程式流、邏輯以及對資料庫的查詢。他們可以接收引數、輸出引數、返回單個或者多個結果集以及返回值。 種類: 使用者自定義儲存過程 系統儲存過程 擴充套件儲存過程

C++CCF 201703-4 地鐵修建 從80分到100分的優化過程

#include <bits/stdc++.h> using namespace std; const int MAX_EDGE = 200005; const int MAX_VERTICES = 100005; struct Edge{ int v, len, last; } ed

C++C++函式過載過程中的二義性和型別轉換

例如函式形參的型別是int,呼叫函式時卻將short型別的資料交給了它,編譯器就需要先將short型別轉換為int型別才能匹配成功。 注意,型別提升和型別轉換不是一碼事!型別提升是積極的,是為了更加高效地利用計算機硬體,不會導致資料丟失或精度降低;而型別轉換是不得已

C#機房重構-下機(策略模式)

策略模式 策略模式:定義演算法家族,分別封裝,讓它們之間可以相互替換,此模式計演算法的變化,不會影響到使用演算法的客戶。策略模式封裝了變化,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就

專欄 - 機房收費系統(VB版+C#)

機房收費系統(VB版+C#) VB與資料庫的互動,VB各種控制元件的調整,SQL語句的熟練使用,以及後期系統的除錯優化,以小見大,都能給我們很好的啟發! 後期的C#重構的機房收費系統,對於三層的理解,資料庫的設計,設計模式的使用

C字符串常量和字符數組

gcc pre class fun 後者 一段 put light cmp 此次博客是轉載某位博主的文章,不過現在找不到了,所以先聲明一下。 先貼一段代碼: #include <stdio.h> int main(int argc, const char**

C#監測文件改變類

tco private clas 目錄修改 obj directory 設置 行修改 config using System.IO;//首先實例化一個對象 FileSystemWatcher watcher = new FileSystemWatcher(); //

C#Color顏色對照表

pac eee lower fda flow dig val rim cee Color.AliceBlue 240,248,255 Color.LightSalmon 255,160,122 Color.

C#全局鍵盤監聽

控制 keyevent 註冊 相關 一個 rsh rds api函數 start using System; using System.Collections.Generic; using System.Text; using System.Runtime.Inter

Debug目錄、Release目錄,bin目錄、obj目錄,vshost.exe.config文件、.exe.config文件分析C#

修改 .com 重啟 不同 span http ocs 資料 更改 Debug目錄、Release目錄,bin目錄、obj目錄,vshost.exe.config文件、.exe.config文件分析【C#】 2013-10-06 孤風卓影 摘自 csdn博客 閱 5

c++LUOGU P1808 單詞分類

使用 排序 nbsp pan size pre 最短 include namespace STL大法好!!! 使用sort()將string排序,map去重並統計即可。 最短代碼如下: 1 #include<bits/stdc++.h> 2 using n