복붙노트

[SQL] CommandType.StoredProcedure 대 CommandType.Text

SQL

CommandType.StoredProcedure 대 CommandType.Text

단지 텍스트 명령을 사용하는 것이 아니라 명시 적으로의 StoredProcedure CommandType을을 사용하여 어떤 혜택이 있습니까? 즉,이다

cmd = new SqlCommand("EXEC StoredProc(@p1, @p2)");
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@p1", 1);
cmd.Parameters.Add("@p2", 2);

보다 더

cmd = new SqlCommand("StoredProc");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@p1", 1);
cmd.Parameters.Add("@p2", 2);

편집 : (다시) 나쁜 복사 붙여 넣기 작업을 수정했습니다. 또한, 질문의 요점은 데이터 액세스 클래스입니다. 나는 차라리 각 매개 변수에 대한 별도의 라인에 반대 한 줄에 저장된 프로 시저 이름과 매개 변수를 전달할 수있을 것입니다.

해결법

  1. ==============================

    1.한 가지 차이점은 메시지 펌핑이 발생하는 방법입니다.

    한 가지 차이점은 메시지 펌핑이 발생하는 방법입니다.

    내가 일을하는 데 사용되는 경우 우리는 밤을 달려 배치 프로세스의 번호를 가지고 있었다. 그들 중 대부분은 단순히 저장 프로 시저를 실행하고있었습니다. 우리는 이러한 사용하여 SQL 서버 작업을 예약하는 데 사용하지만, 대신 닷넷 프로그램에서 프로 시저를 호출 그것에서 멀리 움직였다. 이것은, 한 곳에서 모든 예약 된 작업을 계속하려면 SQL 서버와는 아무런 관련이없는 경우에도 사람을 우리를 허용했다.

    또한 하룻밤 모든 프로세스에서 로깅이 일치 하였다 그래서, 우리가 절차를 호출하는 닷넷 프로그램에 더 나은 로깅 기능을 구축 할 수 있었다. 저장 프로 시저는 SQL 인쇄 및 RAISERROR 기능을 사용하고, 닷넷 프로그램을 수신하고 그를 기록합니다. 우리가 배운 것은 절차가 완료 될 때까지 CommandType.StoredProcedure 항상 (50) 닷넷 코드는 모든 로그 이벤트를 볼 수없는 것에 대해 일괄 적으로 이러한 메시지를 버퍼링 것이라고했다 또는 버퍼, 당신은 연결 또는 무엇에 설정된 어떤 옵션에 상관없이 플러시 당신은 당신의 SQL로했다. CommandType.Text 우리를 위해이 문제를 해결했습니다.

    측면의 문제로서, 나는 쿼리 매개 변수를 명시 적 유형을 사용하십시오. 분들께 닷넷은 어떤 상황에서 문제를 일으킬 수있는 매개 변수 유형을 추론하려고합니다.

  2. ==============================

    2.그것은 청소기입니다.

    그것은 청소기입니다.

    당신은 왜 그냥 CommandType.StoredProcedure를 사용, 저장 프로 시저를 호출하는거야?

  3. from https://stackoverflow.com/questions/643880/commandtype-text-vs-commandtype-storedprocedure by cc-by-sa and MIT license