기존의 웹에서 구한 MX Record를 얻어오는 모듈에 문제가 좀 있는 것 같아서 좀 더 찾다가 발견한 글이다.

 

글 서두에 보면, .Net Framework은 많은 native APIs의 wrapper를 제공하는데, 모두를 제공하는 것은 아니라고 한다. 그래서 MX Record를 얻어오는 빠져있는 것인거 같다.

 

Java의 경우는 JDK에 포함되어 있다고 하던데...

 

하여간 그래서 아래의 소스는 실제 MX Record를 얻어오는 코드가 아니고, 실제 구현이 되어 있는 'Dnsapi.dll'의 메소드를 call해 주는 소스인 것 같다.

 

 


..more


출처 : http://blogs.msdn.com/brada/articles/361363.aspx

 


..more


요약

본 보고서는 Oracle 마케팅 부서의 대대적인 홍보 전략과 함께 최근 출시된 Oracle의 주력 데이터베이스 제품의 최신 버전인 Oracle Database 10g에 대한 1차 분석 결과입니다. Oracle은 이 새로운 버전을 그 동안 악명이 높았던 자사 데이터베이스 제품의 복잡성을 해결한 혁신적인 제품으로 내세우고 있으며, Windows 기반 서버를 사용하는 중소, 중견 기업을 겨냥하고 있습니다. 이들 중소, 중견 기업들은 현재 Microsoft의 SQL Server가 주도하고 있는 시장으로서, Oracle이 전통적으로 강세를 나타내고 있는 하이엔드 고객들에 비해 사용 편이성에 대한 요구가 훨씬 높은 것이 특징입니다.

또한, 본 보고서에서는 대대적으로 홍보가 된 이 제품의 기능 및 가치 제안을 설명하고 분석합니다. 보고서의 초점은 Oracle이 Microsoft SQL Server 2000에게 강력하게 도전하고 있는 다섯 가지 기술 분야에 맞추어져 있으며, 많은 경우 Microsoft SQL Server 2000와 비교해 설명합니다. 또한 향후 두 제품에 대한 심층적인 연구를 통해 두 제품의 차이점을 분명하게 밝히고 보다 세부적으로 논의하는 한편, Microsoft SQL Server 2000과 Windows 운영 체제에서 훨씬 경쟁력있는 RDBMS 솔루션으로서 확고하게 그 입지를 고수할 수 있도록 빈틈없이 정의할 것입니다.

소개

  • 전체 요약
  • 그리드 컴퓨팅
  • Oracle RAC
  • 관리 용이성
  • Business Intelligence
  • 총소유비용
  • 결론

 

--------------------------------------------------------

 

MS 사이트의 자료입니다.

 

출처 : http://www.microsoft.com/korea/sql/evaluation/compare/Oracle10g.asp

소스 안에 주석으로 XML comment를 추가하고, NDOC라는 오픈소스 프로젝트의 프로그램을 이용하여 자동으로 메뉴얼을 만들 수 있다.

 

MSDN 스타일의 뽀대나는 메뉴얼을 거져(?) 얻을 수 있다.

 

실제 적용할 만한 프로젝트가 있어 적용해 보고자 한다.


..more


아래 그림과 같이 특정 registry의 정보가 바뀌었을 경우 그 내용을 event로 전달받을 수 있게 해 주는 프로그램

 

특정 application을 작성한 후 config 정보가 변경될 경우 바로 반영되는 작업을 하기에 매우 적당할 듯

 

Sample Image - RegistryMonitor.png

 


..more


제목 그대로...


..more


쩝... 정말 재미있는걸 만드는 사람들이 많다는 생각이 드네요 ^^''

이 sp는 정말 편할 것 같습니다.

 

Stored Procedure를 C#이나 ASP에서 사용을 할 때, Command Object를 사용하는게 성능에 좋다는 것은 알고 있지만, 지긋지긋한 parameter 객체들을 만들 생각을 하다가 귀찮아서 다른 방식으로 간단하게 사용하는 경우들이 종종 있습니다.

 

이 sp는 그 문제를 해결해 주네요 ^^''

 


..more


정규식을 이용하여 쿼리문을 정렬해 주는 넘을 함 만들어 봤습니다.

제 홈페이지에 간단하게 ASP .Net으로 만들어 놓았습니다.

현재는 간단한 수준의 정렬만 가능합니다.

 

중첩쿼리 지원이 가장 큰 관건입니다만, 일단 아쉬운데로 이 정도면 보기에 보다 편하게 정렬은 해 주니까요.

 

아래는 주소입니다.

 

혹시 버그나 원하시는 기능 있으면 덧글 달아주세요.

버그는 가급적 수정하겠지만 원하시는 기능은 봐서 추가가 될껍니다. ㅋㅋ

버그가 있더라도 이해 바랍니다. ^^''

 

http://goodfeel.pe.kr/sqlutilweb/sqlarranger.aspx

 

일단 아래 예제 문장을 그대로 붙여서 정렬해 보시면 됩니다. ^^''

 

아래 문장은 보안(?) 상의 이유로 컬럼 및 테이블 이름을 임의대로 변경한 쿼리 예제입니다.

 

아래와 같이 임의의 공백과 줄바꿈 탭들로 인해 가독성이 떨어지는 SQL문장의 예제입니다.

  (SELECT sum(-t.cashAmount) as aunt, p.prodd, c.chareId,  cc.deript, p.produme, 0, t.cpId, count(*) as tCount
   FROM tblTran t WITH(READUNCOMMITTED)
      JOIN tblO o
WITH(READUNCOMMITTED) on t.trnId = o.traId 
     JOIN
tblU u WITH(READUNCOMMITTED) on t.usmber = u.usember


      LEFT JOIN tblRe r  WITH
(READUNCOMMITTED) on t.psactionId  = r.tactionId

    WHERE trad = 6

AND t.registDt >= @startDt AND t.registDt < @endDt


     AND sc.seeId = 1  AND r.refund IS NULL

   GROUP BY p.prd, c.chard, cc.descript, p.productName, t.cpId)

 

 

ASP코드에서 직접 쿼리를 사용할 경우 디버깅을 위해 response.write로 출력할 경우 쫘~악 붙어 나오는 쿼리의 예제입니다.

SELECT sum(-t.cashAmount) as aunt, p.prodd, c.chareId,  cc.deript, p.produme, 0, t.cpId, count(*) as tCount FROM tblTran t WITH(READUNCOMMITTED) JOIN tblO o WITH(READUNCOMMITTED) on t.trnId = o.traId JOIN tblU u WITH(READUNCOMMITTED) on t.usmber = u.usember LEFT JOIN tblRe r  WITH(READUNCOMMITTED) on t.psactionId  = r.tactionId WHERE trad = 6 AND t.registDt >= @startDt AND t.registDt < @endDt AND sc.seeId = 1  AND r.refund IS NULL GROUP BY p.prd, c.chard, cc.descript, p.productName, t.cpId

 

 

쩝... 새해가 되면서 내 나이도 이제 베스킨라빈스...

 

머리가 나빠진건지... 정규식을 이용해 간단한 도구를 만들고 있는 중이다.

다른 때는 잘 느끼지 못하는데, 특히나 정규식을 할 때 이런 생각이 든다.

항상 간단한 정규식만을 만들어 사용하다가 이번엔 조금 복잡한 만들게 됐다.

 

까먹지 않고 혹시 나같이 고생하는 사람을 위해...

 

".... LEFT JOIN..... JOIN...." 

다음과 같은 쿼리 문장 중에 JOIN문 앞에서 줄바꿈을 하고 LEFT JOIN의 LEFT 앞에서 줄바꿈을 하려고 했다. 그냥 LEFT JOIN을 줄바꿈+LEFT JOIN으로 바꾸고 JOIN을 줄바꿈+JOIN으로 바꾸면 LEFT JOIN문장은 줄바꿈+LEFT+줄바꿈+JOIN이 된다.

 

그래서 앞에 LEFT나 RIGHT등이 아닌 JOIN문을 찾아 줄바꿈+JOIN으로 바꾸는 방법이다.

물론 C#을 이용해서

 

Regex.Replace(str, @"(?<!LEFT\s+|RIGHT\s+|OUTER\s+)(?<end>JOIN)", String.Format("\r\n{0}", "${end}"))

 

Replace의 첫번째 인자는 source, 두번째는 검색할 내용, 세번째는 바꿀 내용이다.

몇일 고생하며 MSDN 뒤지다가 검색한 예제를 보고 알았다.

 

중요한건 (?<!) ()안의 ?<!뒤에 나오는 내용이 매치되지 않는 스트링을 찾는다는 의미

\s+는 하나 이상의 공백 캐릭터

(?<end>JOIN) 이건 JOIN이고 ?<name>은 name으로 capture해 놓는다는 의미.

capture를 해 두면 뒤쪽 replace에서 capture한 내용을 재 사용할 수 있다.

 

정규식에 대해 전혀 모르는 분은 위의 내용이 무슨 암호로 받아드려지겠지만, 쩝... 정규식 알면 알 수록 신기한 듯 ㅋㅋ

 

 

보니까 SQL Server 2005에서 사용할 수 있는 API들인가보네요.. 글도 2004년 12월에 올라왔고...

내용은 제목대로 SQL Server를 tracing하고 재실행 할 수 있는 API라...

 

프로파일러를 만들 수 있겠네요. ^^;;

꽤 재미있을 듯...

Trace and Replay Objects: A New API for SQL Server Tracing and Replay

Slavik Krassovsky
Microsoft Corporation

December 2004

Applies To:
   Microsoft SQL Server 2005

Summary: This paper introduces Trace and Replay objects, a new feature in Microsoft SQL Server 2005. Trace and Replay objects is a new managed API for tracing, trace manipulation, and trace replay. (12 printed pages)

Contents

Introduction
Trace Objects
Replay Objects
Conclusion

 


..more


'programming > MSSQL' 카테고리의 다른 글

정규식을 이용한 쿼리문 정렬유틸(?)  (3) 2005.01.18
Data Access Technologies Road Map  (0) 2005.01.14
Google에서 제공하는 뉴스 그룹  (0) 2005.01.12

영문 자료이긴 하지만 전반적인 데이터 접근 기술들의 전반적인 동향이나 간략한 설명으로 전반적인 이해에 도움이 될 것 같습니다.

 

Data Access Technologies Road Map

Prash Shirolkar, Author
Alyssa Henry, Contributor
Stephen Pepitone, Contributor
Acey J. Bunch, Contributor
Microsoft Corporation

Created: January 2002
Revised: December 2004

Summary: Learn about the past, present, and future of the Microsoft data access technologies. (8 printed pages)

Contents

Introduction
Microsoft Data Access Components (MDAC)
Current MDAC Architecture
Current MDAC Components
Deprecated MDAC Components
MDAC ReleasesSQL Native Client
ADO.NET
Obsolete Data Access Technologies
For More Information

 


..more


현재 beta인거 보니 테스트 중인가본데...

뉴스그룹을 google 사이트에서 사용할 수 있습니다.

 

검색도 빠르고 괜찮은거 같던데...

 

아래 주소는

 

microsoft.public.sqlserver.programming에 대한 주소이고,

왼쪽 상단 이미지를 누르면 google newsgroup main으로 가서 다른 것도 이용하실 수 있습니다.

 

http://groups-beta.google.com/group/microsoft.public.sqlserver.programming

 

카페 왼쪽 아래 Link 부분에 추가해 두겠습니다.

 

많이 활용해 보세요~

가이드라인을 완성했습니다.

일단 목표로 했던 내용은 모두 다뤘습니다.

 

원문이 제법 길기 때문에 파일로 첨부합니다.

 

 

 

소개 (Introduction):

 

이 문서는 닷넷 프레임워크 기반의 소켓 프로그램을 작성하려는 개발자를 위해 작성되었습니다.

닷넷 개발자는 C/C++ 등으로 작성된 서버/클라이언트와 통신하기 위한 모듈 또는 소프트웨어를 제작해야 하는 상황에 부닥치게 됩니다.

닷넷 환경에서의 소켓 프로그래밍에 익숙하지 않은 개발자는 많은 어려움에 직면하게 됩니다.

 

이 문서는 다음과 같은 문제점을 해결하기 위한 가이드라인을 제시합니다.

l        닷넷 환경에서 구조체를 이용한 소켓 통신 구현이 어렵습니다.

l        닷넷 환경과 이기종 환경 간의 통신에서는 데이터의 타입 변환을 신중히 생각해야 합니다.

l        그밖에 문자열 변환 등에서 부닥치게 되는 예기치 못한 문제들이 있습니다.

또한 닷넷 환경에서 소켓 통신을 할 때 자주 쓰이는 주요 함수 또는 패턴을 기술합니다.

 

이 문서의 주요 섹션은 다음과 같이 구성되어 있습니다.

l        닷넷 환경에서 구조체는 관리되는 메모리 구조를 갖는다.

l        닷넷 환경에서의 구조체를 이용한 소켓 통신 구현 방법

l        패킷 송신 방법

l        패킷 수신 방법

l        주요 함수 

l        데이터의 변환

'programming > c#' 카테고리의 다른 글

정규식 노가다(??)...  (0) 2005.01.17
Windows Service 제작 #2  (0) 2005.01.05
Creating a Windows (NT) Services  (0) 2005.01.05

error message

The server process has lost its connection with MS-DTC. This is expected if MS-DTC has stopped, or if MS-DTC failover has occurred on a cluster.

Server Application ID: {02D4B3F1-FD88-11D1-960D-00805FC79235}
Server Application Instance ID:
{D9197A81-84FB-4051-8AA9-F1156151D6C0}
Server Application Name: System Application
The serious nature of this error has caused the process to terminate.
Error Code = 0x8004d01c : A connection with the transaction manager was lost.

 

------------------------------------

 

출처 : http://weblogs.asp.net/rhurlbut/archive/2004/01/02/47211.aspx

 


..more


조금 더 자세한 자료

 

출처 : http://www.codeproject.com/dotnet/simplewindowsservice.asp

 

Simple Windows Service Sample
By
Mahmoud Nasr

A simple application to show how to create a Windows service. 


..more


VS .Net으로 Windows Service를 만드는 방법

 

출처 : http://www.c-sharpcorner.com/2/window_service.asp


..more


ArrayList 클래스의 매개 변수 없는 ToArray 메서드는 Object 형식의 배열을 반환합니다. Object 배열을 사용자 형식의 배열로 캐스팅할 때는 ToArray의 매개 변수 없는 구현을 사용할 수 없습니다. 예를 들어 ArrayList에 Customer 개체를 몇 개 추가하면 기본 목록이 Customer 배열로 만들어지지 않습니다. 따라서 다음 문은 System.InvalidCastException 예외와 함께 실패합니다.
Customer [] customer = (Customer[])myArrayList.ToArray();
강력하게 형식화된 배열을 반환하려면 개체 형식을 매개 변수로 받아들이는 오버로드된 ToArray 메서드를 사용하십시오. 예를 들어 다음 문은 성공합니다.
Customer [] customer = (Customer[])myArrayList.ToArray(typeof(Customer));

참고: C#에서는 암시적 캐스팅이 허용되지 않으므로 ToArray 메서드의 결과를 명시적으로 캐스팅해야 합니다.

중요: ArrayList의 요소는 개체 형식이 모두 같아야 합니다. 다른 개체로 이루어진 ArrayList를 특정 형식으로 캐스팅하려고 하면 ToArray 메서드가 실패합니다.

단계별 예제

using System;
using System.Collections;

  class Class1
  {    
    [STAThread]
    static void Main(string[] args)
    {      
        customer c = new customer();
        c.cname = "anonymous";
       
        ArrayList al=new ArrayList();
        al.Add(c);
        object[] cArray = al.ToArray();


        //Display the type of the ArrayList.
        Console.WriteLine(cArray.GetType());
        
        //customer[] custArray = (customer[])(al.ToArray());

        //InvalidCastException 예외를 재현하려면 위의 주석문을 해제하고.

        // 아래 명령을 주석처리 하여 실행하십시오.        
        customer[] custArray = (customer[])al.ToArray(typeof(customer));

        Console.WriteLine(custArray.GetType());       
    }
  }
  class customer
  {
    public string cname;
  }

 

자료출처 : http://support.microsoft.com/

'programming > c#' 카테고리의 다른 글

Creating a Windows (NT) Services  (0) 2005.01.05
[펌] Asynchronous Socket Programming in C#  (0) 2005.01.01
.NET Enterprise Services 성능  (0) 2004.12.23
Asynchronous Socket Programming in C#
Client-Server Example with Multiple Simultaneous Clients


Jayan Nair (view profile)
August 31, 2004

Environment:  C#, Windows

Objective

The objective of this article is to demonstrate a socket-based client/server application that will allow two-way asynchronous communication between a server and multiple client applications. Because this example uses asynchronous methods, the server application does not use threads to communicate to multiple clients (although internally the asynchronous communication mechanism uses threads at the OS level).


..more


t는 SQLDMO의 Table 객체입니다.

 

QueryResults qr = t.EnumDependencies(SQLDMO_DEPENDENCY_TYPE.SQLDMODep_Children);
              
for(int i=1;i<=qr.Rows; i++)
{
    if(qr.GetColumnLong(i, 1) ==

        (long)SQLDMO_OBJECT_TYPE.SQLDMOObj_StoredProcedure)
    {
        string spName = qr.GetColumnString(i,2);
        Console.Out.Write("spName = {0}", spName);
}

'programming > MSSQL' 카테고리의 다른 글

windows 2003에서 이런 에러 발생 시  (0) 2005.01.11
[Ref]SQLDMO QueryResults  (0) 2004.12.28
Essential SQL Server 2005 For Developers #6  (0) 2004.12.23

SQLDMO를 사용하다 보면 특정 method의 결과가 QueryResults인 경우가 있다.

 

QueryResult는 다음과 같이 구성된다.


..more


.NET Enterprise Services 성능

Richard Turner, 프로그램 관리자, XML Enterprise Services
Larry Buerk, 프로그램 관리자, XML Enterprise Services
Dave Driver, 소프트웨어 디자인 엔지니어, XML Enterprise Services

Microsoft Corporation

2004년 3월

적용 대상:
   COM+ 구성 요소
   Microsoft .NET Enterprise Services

요약: 다른 활성화 및 호출 패턴에 적용될 때의 원시 COM+ 및 .NET Enterprise Services 구성 요소 성능을 확인합니다. .NET Enterprise Services 구성 요소를 C++의 COM+ 구성 요소처럼 빨리 실행하기 위한 지침과 함께 고성능 .NET Enterprise Service 구성 요소를 만드는 데 도움이 되는 주요 권장 사항을 살펴봅니다(45페이지/인쇄 페이지 기준).

관련 EnterpriseServicesPerf.exe 코드 샘플을 다운로드하십시오.

목차

소개
관리되는 코드로 마이그레이션해야 하는 이유
코드 변경 정도 지정
.NET Enterprise Services에 COM+ 연결
.NET Enterprise Services와 COM+ 성능 비교
테스트 결과 및 분석
결론
부록 1: 성능 권장 사항
부록 2: "Indigo" 및 .NET의 동향
부록 3: 분산 트랜잭션이 성능에 미치는 영향
부록 4: 참고 자료
부록 5: 성능 테스트 소스 코드
부록 6: 테스트 결과


..more


Transact-SQL in SQL Server 2005

-         Exception Handling

-         Common Table Expressions

-         PIVOT

-         Ranking and Partitioning

-         Cross-Outer Apply

-         TOP enhancements

-         Auto output

 


..more


'programming > MSSQL' 카테고리의 다른 글

[Ref]SQLDMO QueryResults  (0) 2004.12.28
Essential SQL Server 2005 For Developers #5  (0) 2004.12.22
Essential SQL Server 2005 For Developers #4  (0) 2004.12.21

3일차

 

SQL Server Engine Features

 

-         New Data Types

-         Snapshot Isolation

-         Extended Triggers and Norifications

-         Revised BULK INSERT syntax

 


..more


.Net Types in SQL Server 2005

 

SQL Server 2000에서 사용되었던 UDT와 유사하지만 많이 다른 개념입니다.

그럼 UDT를 왜 사용해야 하는가?

è     기본적으로 제공되는 데이터 타입으로는 표현이 불가능한 부분을 데이터 타입화 하기 위한 방법으로, 예를 들어 위도, 경도 같은 값의 표현을 할 수 있게 됩니다.

 

SQL Server 2000 UDT와의 차이점

-         복수의 값을 표현할 수 있다

-         접근자(프로퍼트)를 이용하거나, 복잡한 로직처리를 mulators(일종의 method) 로 처리할 수 있다.

-         written in compiled language (.Net language로 구현)

 

Cataloging a UDT

UDF와 동일하게 UDT 역시 catalog에 등록을 해야 합니다.

순서도 동일합니다.

먼저 Assembly를 등록한 후, CREATE TYPE을 통해 등록을 합니다.

 

Working with UDTs

Type은 다음과 같은 곳에서 이용할 수 있다.

-         테이블의 컬럼을 정의할 때

-         변수나 파라미터를 정의할 때

-         UDF의 리턴값으로

 

사용예 : PointCls 라는 타입이 추가 된 경우

 

CREATE TABLE point_tab(

             Id int primary key,

             Thepoint PointCls)

 

INSERT INTO point_tab VALUES (1, 100:200)

 

 

Accessors and Mutators

-         property method로 이해하면 쉽습니다.

실제 UDT Accessors and Mutators를 정의할 때 .Net 코드로 property method를 구현하면 됩니다.

 

SELECT thepoint.X, thepoint.U FROM point_tab

와 같이 사용 가능합니다.

 

 

UDT state

UDT를 정의 할 때 일반적으로 두 가지의 Format으로 만들 수 있습니다.

-         Native : 단순한 형태. 일반적인 UDT를 만들 때 사용

-         UserDefined : 복잡한 형태로 구현해야 할 method가 많다. 보다 세밀한 제어가 필요할 때 사용

n         예를 들어 order by 같은 것을 할 경우 Native를 선택했을 경우에는 order by 뒤에 나온 값을 기준으로 정렬하되, 같은 값이 존재할 경우 UDT에 정의된 순서에 의해 정렬하게 되는데, 임의로 아니면 원하는 형태의 정렬방식 대로 정렬하고 싶다면 UserDefined로 만들어 세부적으로 제어할 수 있는 코드를 추가해야 한다.

 

UDG (user defined Aggregate)

-         간단하게 설명만 하면

-         UDT로 만든 컬럼을 SUM, AVG와 같은 작업을 하게 될 경우나 특별한 형태의 Aggreation 함수를 만들 경우 예를 들면

        SELECT MyFunc(lastname) FROM authors GROUP BY ReportsTo

 

         id           name

         1            a, b, c

         2            d, e

         3            null

 

              이런 식으로 출력하기 위한 함수를 정의하거나 할 때 사용한다.

2일차

 

The SqlServer Data Provider

 

ADO 프로그래밍을 해 보신 분이라면 SqlClient에 대해서 잘 아실껍니다.

이와 유사한 SqlServer라는 Data Provider가 있습니다.

SqlServersqlaccess.dll를 참조하여 사용하실 수 있습니다.

 

 

SQL Server programming models

-         SQL Server 2005 includes two data providers

n         System.Data.SqlServer

n         System.Data.SqlClient

 

SqlServer.Net로 만든 procedural code에서 사용할 수 있습니다. 이 전 게시물에도 이미 나온 내용이지만

-         UDF (User Define Function)

-         SP (Stored Procedure)

-         Trigger

등에서 사용할 수 있습니다.

 

일반적인 사용법은 SqlClient와 유사합니다.

차이점은 SqlClientSqlConnection을 사용하고,

SqlServerSqlContext를 사용한다는 점입니다.

또한, SqlServer를 사용하여 만든 procedural codeSQL Server내에서 실행되므로, 별도의 connection을 맺거나, 데이터가 네트웍을 통해 이동하거나 하지 않습니다.

 

SqlContext

-         SqlContext는 현재 실행중인 context를 나타냅니다.

n         GetConnection() : 현재 connection을 얻을 때

n         GetCommand() : 새로운 command를 얻을 때

n         GetTransaction() : 현재 transaction을 얻을 때

n         GetPipe() : output TDS streampipe를 얻을 때

u       Pipe는 메시지나 결과를 보낼 수 있다.

 

 

SqlDefinition/SqlExecutionContext

-         SqlCommand는 제목과 같이 두 가지로 쪼개질 수 있다.

n         SqlDefinition은 요청에 대한 정의를 나타낸다.

n         SqlExecutionContext는 명령을 실행한다.

 

아주 많이 쓰는 쿼리가 있을 경우, SqlDefinitionSqlExecutionContext 두 부분으로 나누어 SqlDefinition을 한 번만 정의한 후 실행 시 SqlExecutionContext만 실행하므로써, 보다 나은 성능을 기대할 수 있다.

물론 자세한 성능 비교는 SQL Server 2005 beta 3에서 할 수 있다고 한다.

 

자세한 코드는 생략

 

Command results

-         ADO 프로그래밍을 해 본 사람이라면 모두 쉽게 알 만한 내용들이다.

n         Scalar result

n         Single row result

n         Multi-row result

 

SqlTransaction

-         SqlContext.GetTransaction()으로부터 SqlTransactoin을 얻어와서 현재 트랜잭션이 있는지 유/무 등을 판별할 수는 있지만, 만약 진행 중인 Transaction이 있는 경우, 내부에서 그 트랜잭션을 commit, rollback 및 새 중첩 transaction을 시작할 수는 없다. 지원하지 않는다.

 

SqlTraggerContext

-         SqlContext.GetTriggerContext()를 통해 얻어온 SqlTriggerContext를 이용하여 Trigger를 만들 수 있다.

n         Tc.TriggerAction : 1(update), 2(insert), 4(delete)

 

 

오전에 배운 내용 정리 끝~

 

 

.Net Procedural Code

 

여기서 다룰 내용들

- Procedural code or Transact-SQL

- Writing .Net procedural code

- .Net data types and System.Data.SqlTypes

- Arrtibutes

 

 

어떤 .net language로든 SQL Server 2005 다음과 같은 것들을 만들 수 있다.

- stored procedure

- user defined functions

- triggers

 

 

.Net Code VS Transact-SQL

- Transact-SQL code는 data-access centric code에 보다 낫다

   * .net runtime을 로드할 필요가 없다.

   * 데이터 레이어에 직접 접근할 수 있다

   * 절차적 프로그래밍이다.

 

- .Net code는 non-data access code에 보다 낫다

   * 수학적인 연산

   * SQL Server 외부의 시스템 리소스에 접근이 필요한 경우

   * 객체지향 프로그래밍이다.

 

Limitions on functions (.net code로 function을 만들 때의 제약 사항)

- class는 반드시 public 이어야 한다.

- public static인 method 이어야 한다.

- nested class는 지원하지 않는다.

- method overloading도 지원하지 않는다.

- ref, out을 지원하지 않는다.

- datatype은 가급적 SqlTypes을 사용하는 것이 좋다.

 

몇 가지 내용이지만.. 간략히 정리하기엔 어려움이 좀 ^^''

그래서 여기까지만

 

 

SQL Server .Net Integration

 

처음 소개 되는 내용은 SQL Server 2000에서 xp_...로 시작하는 외부 DLL을 사용하는 sp를 만들어 보셨거나, 알고 계실 겁니다.

거기에 해당되는 내용입니다. .Net을 이용해 DLL을 만든 후 SQL Server 2005에서 사용하는 방법에 대해 배웁니다.

 

간략하게 사용 하기 위한 절차를 보면,

-         Dll 파일(assembly라고 부릅니다.), assembly SQL Server 2005 cataloging(등록하는 거라고 생각하시면 됩니다.)합니다.

-         등록된 assembly를 이용하여 UDF(User Define Function)을 만듭니다.

 

Assembly는 세가지 레벨의 permission을 가집니다.

-         Safe (Default)

-         External access : network이나 file system을 접근하는 경우

-         Unsafe : WIN32 DLL이나 COM Object call하는 경우

 

Assembly dependencies

-         등록하는 Assembly가 참조하는 다른 dll이 있다면 그 DLL 역시 SQL Server에 자동으로 cataloging이 됩니다. 단 자동으로 등록된 assembly default visible 값이 0이므로, object explorer에서는 보이지 않고, sys_assemblies 테이블을 직접 select 해야 보입니다.

-         Visible 속성값을 1로 바꿔 보이게 하여 사용할 수도 있습니다.

 

 

그럼 간략하게 만드는 방법을 보면

일단 예제 코드를 보면

namespace Math

{

             public class Inverter

{

             public static int Invert(int x)

{

return -x

}

            

}

}

 

이렇게 만들어 컴파일 한 후,

 

SQL Server 2005에서 위에 설명한 절차대로 등록을 합니다.

 

CREATE ASSEMBLY MetricConverter

FROM 'c:\test\Math.dll'

 

 

CREATE FUNCTION dbo.FahrenheitToCentigrade(@i float)

RETURNS float

EXTERNAL NAME Math.[Math .Inverter].Invert

 

이렇게 한 후

SELECT Invert(10)

하면 -10이 리턴되는 걸 볼 수 있습니다.

 

간단하죠?

 

일단 간략한 소개는 여기까지~~

 

Asynchronous Programming in .NET

written by Bipin Joshi
translated by Asptomorrow
소 개

  .NET 프레임워크 에서 비동기 프로그래밍의 지원은 잘 구현되어 있다. 비동기 프로그래밍 모델은 전체 성능을 향상시킬 뿐만아니라 응용프로그램들을 더욱더 응답적이게(responsive) 해준다. 이 강좌에서 비동기 프로그램을 이용하는 컴퍼넌트를 개발하는 완성된 예제를 보여 줄 것이다.

예제에 대해서

  우리는 비동기 프로그래밍에 대한 지원을 하는 컴퍼넌트를 작성하는 방법을 보여주는 예제를 만들 것이다. 또한 여러분은 컴퍼넌트를 동기적으로 호출하는 방법을 일반적으로 사용하고 있다는 것을 명심하고, 우리는 직원의 월급을 계산하도록 해주는 간단한 프로그램을 개발할 것이다. 먼저 동기적으로 작동하는 프로그램을 만들어서 잘 작동되는지 알아보고, 조금씩 비동기 프로그래밍 기능을 하도록 추가할 것이다.

컴퍼넌트 생성하기

  여러분이 만일 VS.NET 을 사용한다면, C#으로 프로젝트의 새로운 컴퍼넌트 라이브러리 타입을 만들면서 시작할 수 있다. VS.NET을 사용하지 않는다면, Text 에디터에서 .cs 파일을 만들고, 라이브러리(DLL)로 컴파일할 수 있다. 다음 코드는 SalaryCalc 컴퍼넌트를 보여준다.

namespace AsyncProgDemo{public class SalaryCalc{	public SalaryCalc()	{	}	public string Calculate()	{	Console.WriteLine("Inside Calculate()...");	Console.WriteLine("Caclulating salaries...");	Console.WriteLine("Done...");	return "ok";	}}}


  여러분이 위에서 보는 소스는 실제 로직이 들어있지 않은 매우 간단한 코드이다. Salarycalc 라는 클래스를 포함하는 AsyncProgDemo라는 네임스페이스를 만든다. 이 클래스는 한 집단의 모든 직원의 월급을 계산하는 Calculate라는 한개의 메서드를 가지고 있다. 다 마쳐지면 메서드는 "OK" 라는 문자열을 리턴한다.

SalaryCalc 컴퍼넌트를 사용하는 클라이언트 프로그램 만들기

  이 컴퍼넌트를 사용하는 콘솔 프로그램을 만들어보자.

using System;namespace AsyncProgDemo{	class Client	{		static void Main(string[] args)		{			SalaryCalc sc=new SalaryCalc();			sc.Calculate();		}	}}


  이 프로그램은 매우 직관적이어서 설명이 필요없을 것이다.

비동기프로그램 컴퍼넌트에 대한 코딩 가이드라인

  실제 코딩에 들어가기 전에, 비동기 컴퍼넌트 설계시 추천할만한 가이드라인이 무엇이 있는지 알아보자.

    ■ 비동기 뿐만 아니라 동기적으로도 메서드를 호출할수 있는 기능 제공

    ■ 필요에 따라 클라이언트(caller 응용프로그램)이 호출되는 메서드의 버전을 결정할수 있도록 하는 기능

    ■ 동기적으로 호출한 메서드를 만들기 위해 클라이언트 응용프로그램을 수정하지 않는다. 클라이언트 는 컴퍼넌트에의해 어떻게 호출되는지 모르도록 진행되어야 한다.

비동기프로그램 메서드에 대한 코딩 가이드라인

  여러분의 비동기 컴퍼넌트는 메서드를 위해서 다음과 같은 가이드라인을 준수해야한다.

    ■ 다음과 같은 시그너쳐를 매칭시키는 컴퍼넌트를 작성한다.

        □ public XXXX()

        □ public IAsyncResult BeginXXXX(AsyncCallback ac, Object state)

        □ public EndXXXX(IAsyncResult result)

  위의 메서드 중에서 XXXX는 메서드 이름을 나타낸다. 예를들어, 앞에서 본 소스의 경우 Calculate, BeginCalculate, EndCalculate 메서드로 쓸 수 있다. EndXXXX 의 리턴 타입은 여러분의 메서드에서 원했던 리턴타입과 같다. (이 경우 string 일것이다)

  BeginXXXX 메서드의 경우 다음과 같은 사항을 기억하자.

    ■ 모든 IN 파라미터를 포함한다.

    ■ 모든 OUT 파라니터를 포함한다.

    ■ 모든 IN/OUT 파라미터를 포함한다.

    ■ 마지막 두개의 파라미터로 AsyncCallback과 object를 받아들인다.

    ■ ISyncResult를 리턴한다.

  EndXXXX 메서드의 경우 다음과 같은 사항을 기억하자.

    ■ 모든 IN/OUT 파라미터를 포함한다.

    ■ 모든 OUT 파라니터를 포함한다.

    ■ IAsyncResult를 마지막 파라미터로 받아들인다.

    ■ 여러분이 원하는 데이터 타입으로 값들을 반환한다.

  우리가 만든 메서드는 다른 파라미터를 포함하지 않았지만 여러분은 다른 메서드들과 마찬가지 방법을 사용할 수 있다.

네임스페이스 포함시키기

  위의 예제가 잘 작동하려면 여러분은 다음과 같은 네임스페이스를 컴퍼넌트에 추가시켜야 한다.

  ■ System

  ■ System.Runtime.Remoting.Messaging

SalaryCalc 변형하기

using System;using System.Runtime.Remoting.Messaging;namespace AsyncProgDemo{public class SalaryCalc{public delegate string CalcDelegate();public SalaryCalc(){}public string Calculate(){	Console.WriteLine("Inside Calculate()...");	Console.WriteLine("Caclulating salaries...");	Console.WriteLine("Done...");	return "ok";}public IAsyncResult BeginCalculate(AsyncCallback ac,Object state){	CalcDelegate cd=	new CalcDelegate(this.Calculate);			IAsyncResult result=	cd.BeginInvoke(ac,state);	return result;}public string EndCalculate(IAsyncResult result){	CalcDelegate cd=(CalcDelegate)	((AsyncResult)result).AsyncDelegate;		object o=cd.EndInvoke(result);	return (string)o;}}}


  여기서, 원래 클래스에서 몇가지 부분을 추가시켰다.

  ■ 위에서 언급한 시그너쳐를 매칭시키는 BeginCalculate 메서드를 추가한다.

  ■ 위에서 언급한 시그너쳐를 매칭시키는 EndCalculate 메서드를 추가한다.

  ■ BeginCalculate 메서드 내부에서 delegate를 끝냈다. 이 메서드는 컴퍼넌트에서부터 callback 을 받은 후에 클라이언트에 의해 호출될 것이다. callback은 Calculate() 메서드가 종료될때 자동으로 호출된다.

클라이언트의 변형된 버전

  이 컴퍼넌트의 비동기적인 특징을 사용하기 위해 우리는 클라이언트를 다음과 같이 바꿀 필요가 있다.

using System;using System.Threading;using System.Runtime.Remoting.Messaging;namespace AsyncProgDemo{class Client{static void Main(string[] args){	SalaryCalc sc=new SalaryCalc();	AsyncCallback ac=new AsyncCallback(MyCallback);	IAsyncResult result=sc.BeginCalculate(ac,sc);	Thread.Sleep(5000);}public static void MyCallback(IAsyncResult result){SalaryCalc sc=(SalaryCalc)result.AsyncState;object o=sc.EndCalculate(result);Console.WriteLine("Inside Callback...");Console.WriteLine("Result of salary Calculation:" + o);}}}


  여기서 Calculate() 메서드를 직접 호출하는 대신에, 우리는 callback 메서드를 호출하는(MyVallback) BeginInvoke 메서드를 호출했고, 결과를 얻었다. 우리는 Calculate 메서드를 직접 호출했을때 같은 결과가 나왔다는 것을 알아두자.

결 론

  .NET은 밑바닥에서부터 비동기 프로그래밍을 지원한다. 여러분은 쉽게 함수를 비동기적으로 기능하게 하는 컴퍼넌트를 개발하게 해준다. 앞에서 우리는 그런 컴퍼넌트를 만드는 방법에 대한 예제를 보았고, 또한 그런 컴퍼넌트 개발을 위한 가이드 라인을 알아보았다.

'programming > c#' 카테고리의 다른 글

.NET Enterprise Services 성능  (0) 2004.12.23
VS .Net에서 Macro를 이용하여 #Region 쉽게 추가하기  (0) 2004.12.14
[펌] COM+ 관련 게시물  (0) 2004.11.12

아래 매크로가 #Region을 쉽게 넣어주는 매크로입니다.

매크로 등록은

VS 실행 후 프로젝트를 하나 여신 후 Tools - Macros - Macro IDE 를 실행한 후

MyMacro 폴더 안에 하나 만드시고... 아래 소스를 붙이시면 끝입니다.

 

단축키 없이 사용하기 불편하니

Tools - option - 환경 - 키보드 에서

다음 문자열을 포함하는 명령 표시에 매크로 이름을 넣으면 검색이 될껍니다.

선택한 후 바로 가기 키 누르기에 등록되지 않은 단축키를 하나 지정하시면 준비 끝!!

 

그 다음.. 소스에서 Region으로 지정하고 싶은 부분을 블럭 지정하시고

등록한 단축키를 누르면 대화창이 하나 뜹니다. Region 이름 넣는 부분

이름을 넣으시면 자동으로 Region으로 감싸 줍니다.

편하죠??

 

귀찮아서 그림은 뺐습니다. ^^''

 

출처 : http://blogs.msdn.com/powertoys/archive/2004/04/27/120775.aspx


..more


'programming > c#' 카테고리의 다른 글

[펌] Asynchronous Programming in .NET  (0) 2004.12.15
[펌] COM+ 관련 게시물  (0) 2004.11.12
C#으로 만든 COM+ Componet의 배포 프로젝트...  (0) 2004.11.09

.NET의 정규식

충돌 과정

Steven A. Smith

2004년 3월

적용 대상:
   Microsoft .NET Framework
   Microsoft ASP.NET
   정규식 API

요약: 정규식은 텍스트로 작업할 때 매우 유용한 도구입니다. 사용자 입력의 유효성을 검사해야 하거나, 문자열 내의 패턴을 검색해야 하거나, 효과적으로 텍스트 서식을 다시 지정해야 할 경우 정규식을 사용하면 좋습니다(14페이지/인쇄 페이지 기준).

이 기사의 소스 코드를 다운로드하십시오.

목차

소개
정규식 개요
단순식
한정사
메타 문자
문자 클래스
미리 정의된 메타 문자 집합
샘플 식
ASP.NET의 유효성 검사
정규식 API
무료 도구
고급 항목
결론
리소스
저자 소개

소개

 


..more


+ Recent posts