상세 컨텐츠

본문 제목

.NET CLR Project 만들기 샘플(음력/양력변환)

C#

by 탑~! 2016. 2. 26. 10:41

본문

1. 새 프로젝트로 데이터베이스의 SQL CLR 프로젝트로 만듭니다.

sqlprojects.jpg

 

2. 이 때 SQL 연결설정을 해 주셔야 합니다. SQL Server Project는 SQL 2005 이상이어야 합니다.

 sqlconnection.jpg

 

3. 프로젝트를 생성하면 클래스가 나옵니다. 이 때 다음과 같이 .NET Code를 넣어주시면 됩니다.

  음력/양력 변환 소스인데요. 원리는 여러 군데 게시판에 있으니 설명을 생략하겠습니다.

 

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Globalization;

 

public partial class UserDefinedFunctions

{

        [Microsoft.SqlServer.Server.SqlFunction]

        public static SqlDateTime Udf_Lunar2Solar(SqlDateTime sDt)

        {

               DateTime dt = (DateTime)sDt;

               bool bExistLeap = false;

 

               KoreanLunisolarCalendar kr_Lunnar = new KoreanLunisolarCalendar();

               int _lunnarYY = kr_Lunnar.GetYear(dt);

               int _lunnarMM = kr_Lunnar.GetMonth(dt);

               int _lunnarDD = kr_Lunnar.GetDayOfMonth(dt);

 

               if (kr_Lunnar.GetMonthsInYear(_lunnarYY) > 12)   

               {

                       bExistLeap = kr_Lunnar.IsLeapMonth(_lunnarYY, _lunnarMM);

                       int intLeap_mm = kr_Lunnar.GetLeapMonth(_lunnarYY);

                       if (_lunnarMM >= intLeap_mm)

                       {

                              _lunnarMM--;

                       }

               }

 

               return Convert.ToDateTime(_lunnarYY.ToString() + "-" + _lunnarMM.ToString() + "-" + _lunnarDD.ToString());

        }

};

 

4. .NET CLR을 SQL에 사용하려면 DB 설정을 변경해야 합니다.

SET NOCOUNT ON;

USE master;

EXEC sp_configure 'clr enabled', 1;

RECONFIGURE;

GO

 

5. 위와 같이 CLR을 사용하게 변경하고 나서 해당 Assembly를 DB에 등록합니다.

use TestDB

Go

 

CREATE ASSEMBLY UDF_Lunar2Solar

    FROM 'D:\SQLNetProjects\UDF_Lunar2Solar\UDF_Lunar2Solar\bin\Debug\UDF_Lunar2Solar.dll'

    WITH PERMISSION_SET = SAFE;

   

CREATE FUNCTION UFN_Lunar2Solar (@sDt as DATETIME)

RETURNS DateTime

AS EXTERNAL NAME UDF_Lunar2Solar.UserDefinedFunctions.Udf_Lunar2Solar

GO

 

6. Assembly를 Function에 정상적으로 등록하고 나면 Function으로 사용이 가능합니다.

with sTB as (

select x = dbo.UFN_Lunar2Solar(cast('1985-03-19' as datetime))

       , y = dbo.UFN_Lunar2Solar('19850319')

       , z = dbo.UFN_Lunar2Solar('1985/03/19')

)

select * from sTB

 

* 결과

x                       y                       z
----------------------- ----------------------- -----------------------
1985-01-28 00:00:00.000 1985-01-28 00:00:00.000 1985-01-28 00:00:00.000

(1개 행이 영향을 받음)


'C#' 카테고리의 다른 글

명명 규칙 (Naming Rule)  (0) 2016.10.06
시간 구하기 Ticks  (0) 2016.07.12
DES 파일 암호화 / 복호화  (0) 2016.02.25
파일 사용중인지 확인  (0) 2016.02.25
IP Address, MAC Address 구하기  (0) 2016.02.25

관련글 더보기