기관실 요금 시스템(개인 재구성)-저장 프로세스

(본 블로그의 진정한 목적은 지식의 공유가 아니라 당시 문제의 누락과 이 문제에 대한 생각을 기록하는 것이다.)
저장 프로시저:
특정 기능을 완성하기 위한 sql 문장 집합
그 뜻을 알 수 있다. sql문장집: 일련의 sql문장으로 구성된 집합이다. 즉, 우리가 일련의 sql문장을 쓸 때(즉 여러 장의 표를 조작할 때) 저장 프로세스를 고려한 다음에 저장 프로세스 이름을 직접 호출하면 된다는 것이다.그러나 내가 아래에 열거한 실례는 이런 상황에 속하지 않고 D층이 논리적 판단에 이르기까지 설계할 때 나는 저장 프로세스를 선택했다. 한편으로는 저장 프로세스의 사용을 이해하고 다른 한편으로는 그것을 인식했다.
조합 조회는 기계실의 큰 난점이다. 처음 시스템을 만들 때 문자열을 연결하여 sql문장을 쓰는 것을 선택했다. 이번에 만약에 예전과 같으면 혼탁한 물에서 물고기를 잡는 느낌이 든다. 그래서 조합 조회는 내가 템플릿 모드에 들어가고 저장 과정에 들어가 같은 창의 공통 부분을 추출하여 실체로 쓰고 실체의 전달을 통해 같은 저장 과정을 호출하여 D층의 대량의 코드를 피한다.
먼저 D-Layer 코드를 봅니다(처음에는 스토리지 프로세스를 포함하지 않음).
Public Function selectInfo(enGroupQuery As GroupQueryEntity) As Object Implements IgroupQuery.selectInfo
        Dim sql As String
        Dim table As DataTable
        Dim sqlParams As SqlParameter() = {New SqlParameter("@fileds1", enGroupQuery.Fileds1),
                                        New SqlParameter("@fileds2", enGroupQuery.Fileds2),
                                        New SqlParameter("@fileds3", enGroupQuery.Fileds3),
                                        New SqlParameter("@Operater1", enGroupQuery.Operater1),
                                        New SqlParameter("@operater2", enGroupQuery.Operater2),
                                        New SqlParameter("@operater3", enGroupQuery.Operater3),
                                        New SqlParameter("@context1", enGroupQuery.Context1),
                                        New SqlParameter("@context2", enGroupQuery.Context2),
                                        New SqlParameter("@context3", enGroupQuery.Context3),
                                        New SqlParameter("@relation1", enGroupQuery.Relation1),
                                        New SqlParameter("@relation2", enGroupQuery.Relation2),
                                        New SqlParameter("@gettable", enGroupQuery.Table)}

        sql = "select * from " & enGroupQuery.Table & " where "
        If Trim(enGroupQuery.Relation1) = "" Then '        
            sql = sql & enGroupQuery.Fileds1 & enGroupQuery.Operater1 & "'" & enGroupQuery.Context1 & "'"
        Else
            If Trim(enGroupQuery.Relation2) = "" Then '       
                sql = sql & enGroupQuery.Fileds1 & enGroupQuery.Operater1 & "'" & enGroupQuery.Context1 & "'" & enGroupQuery.Relation1 & " " & enGroupQuery.Fileds2 & enGroupQuery.Operater2 & "'" & enGroupQuery.Context2 & "'"
            Else '       
                sql = sql = sql & enGroupQuery.Fileds1 & enGroupQuery.Operater1 & "'" & enGroupQuery.Context1 & "'" & enGroupQuery.Relation1 & " " & enGroupQuery.Fileds2 & enGroupQuery.Operater2 & "'" & enGroupQuery.Context2 & "'" & enGroupQuery.Relation2 & " " & enGroupQuery.Fileds3 & enGroupQuery.Operater3 & "'" & enGroupQuery.Context3 & "'"
            End If
        End If

        table = sqlhelper.GetDataTable(sql, CommandType.Text, sqlParams)
        Return table

    End Function

문제는 대량의 논리적 판단이 존재하고 사실상 허용되지 않기 때문에 저장 프로세스를 추가한다: (이후의 D층):
Public Function selectInfo(enGroupQuery As GroupQueryEntity) As Object Implements IgroupQuery.selectInfo
        Dim sql As String = "GROUPCHECK_INFO" '       ,      。
        Dim table As DataTable
        Dim sqlParams As SqlParameter() = {New SqlParameter("@fileds1", enGroupQuery.Fileds1),
                                        New SqlParameter("@fileds2", enGroupQuery.Fileds2),
                                        New SqlParameter("@fileds3", enGroupQuery.Fileds3),
                                        New SqlParameter("@Operater1", enGroupQuery.Operater1),
                                        New SqlParameter("@operater2", enGroupQuery.Operater2),
                                        New SqlParameter("@operater3", enGroupQuery.Operater3),
                                        New SqlParameter("@context1", enGroupQuery.Context1),
                                        New SqlParameter("@context2", enGroupQuery.Context2),
                                        New SqlParameter("@context3", enGroupQuery.Context3),
                                        New SqlParameter("@relation1", enGroupQuery.Relation1),
                                        New SqlParameter("@relation2", enGroupQuery.Relation2),
                                        New SqlParameter("@gettable", enGroupQuery.Table)}

        table = sqlhelper.GetDataTable(sql, CommandType.StoredProcedure, sqlParams)
        Return table

    End Function
End Class

저장 프로세스의 과정에 대해 나는 데이터베이스 시스템 원리에 따라 저장 프로세스를 만들었다.
-- =============================================
-- Author:		<   >
-- Create date: <2015-3-21>
-- Description:	<        >
-- =============================================
ALTER PROCEDURE [dbo].[GROUPCHECK_INFO]

	-- Add the parameters for the stored procedure here
	
	@Operater1 varchar(20),
	@operater2 varchar(20),
	@operater3 varchar(20),
	@context1 varchar(20),
	@context2 varchar(20),
	@context3 varchar(20),
	@relation1 varchar(20),
	@relation2 varchar(20),
	@fileds1 varchar(20),
	@fileds2 varchar(20),
	@fileds3 varchar(20),
	@gettable  VARCHAR(20)
	
		
AS
	declare @strSQL varchar(2000)
BEGIN
	--CHAR(32)    ,CHAR(39)     
	SET @strSQL ='select * from ' + @gettable + ' where ' +CHAR(32)+@fileds1 + @Operater1 + CHAR(39)+ @context1 +CHAR(39)
	if (@relation1 != NULL)
	BEGIN
		SET @strSQL =@strSQL +CHAR(32)+@relation1 +CHAR(32)+@fileds2 + @operater2 +CHAR(39)+ @context2 +CHAR(39)
		if (@relation2 != null)
		BEGIN
		SET @strSQL =@strSQL +CHAR(32)+@relation2 + CHAR(32)+@fileds3 + @operater3 +CHAR(39)+ @context3 + CHAR(39)
		END
	END
	EXECUTE(@strSQL)
END

자신의 이번 저장 프로세스의 도입은 논리 연산을 실현하는 이동 작업일 뿐이다.
누락된 문제:
1. 저장 프로세스를 도입하기 전에 D층 코드에서 나는 실체 필드를 이용하여 sql문장을 썼는데 사실은 매개 변수로 대체해야 한다. 그러나 여기서 sql문장 문자열 결합의 형식 문제를 설계했다. 이전의 vb버전의 시스템에 비해 여러 번 수정했지만 실현되지 못했다.해답을 구하다.
2. 저장 프로세스를 도입한 후에 창설하는 과정에서'인덱스'가 완전하지 않은 문제를 도입했다. 관련 자료를 찾아보았지만 도대체 어떻게 사용해야 할지 모르겠다. 이것도 남겨진 문제이다. 하나의 인덱스일 때 관할 내용을 나타낸다.세 개의 인용부호를 표시할 때 첫 번째는 문자열의 앞 인용부호를 나타내고 두 번째는 전의 문자, 세 번째는 인용부호(문자 내용)를 나타낸다. 그러나 여기에는 전의 문자가 언급되지 않았기 때문에 이 점은 좀 어리둥절하다. 걸어라!

좋은 웹페이지 즐겨찾기