복붙노트

[SQL] Parameters.Add (문자열, 객체)와 Parameters.AddWithValue의 차이

SQL

Parameters.Add (문자열, 객체)와 Parameters.AddWithValue의 차이

나는 MSDN 문서와 여기에 예를 읽고 난 Paramters.Add 호출에 대한 올바른 구문은 알고 :

   command.Parameters.Add("@ID", SqlDbType.Int);
   command.Parameters["@ID"].Value = customerID; 

당신은 어디에서 매개 변수 이름, SqlDbType 및 .Value로 값을 지정해야합니다.

이제 Parameters.AddWithValue 호출에 대한 올바른 구문은 다음과 같습니다

   command.Parameters.AddWithValue("@demographics", demoXml);

단일 라인은 입력 부분을 건너 뛰고.

내 질문은 : 어떻게 그것을입니다 내가 이런 식으로 작업을 수행 할 때,

   command.Parameters.Add("@demographics", demoXml);
   // .Add method with .AddWithValue syntax

나는 어떤 컴파일 오류가 발생하지 않으며, 심지어 괴상, 모든 코드가 실행될 때 제대로 작동하는 것 같다?

해결법

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

    1.기능면에서 차이가 없습니다. 사실, 모두가이 작업을 수행 :

    기능면에서 차이가 없습니다. 사실, 모두가이 작업을 수행 :

    return this.Add(new SqlParameter(parameterName, value));
    

    그들은 AddWithValue에 찬성 이전 사용되지 않는 이유는 두 번째 매개 변수는 추가의 과부하가 호출되고 있던 일부 사람들에게 즉시 명확하지하게 객체이기 때문에뿐만 아니라, 추가 설명을 추가하는 것입니다, 그들은 격렬하게 다른 결과 행동.

    이 예를 살펴 보자 :

     SqlCommand command = new SqlCommand();
     command.Parameters.Add("@name", 0);
    

    언뜻보기에, 그것은 추가 (문자열 이름, 개체 값) 오버로드를 호출하는 것처럼 보이지만 그렇지 않다. 그것은 추가 (문자열 이름, SqlDbType 타입) 부르고 과부하! 0 열거 유형으로 암시 적으로 변환 때문이다. 이 두 줄 그래서 :

     command.Parameters.Add("@name", 0);
    

     command.Parameters.Add("@name", 1);
    

    사실 두 가지 방법이 호출되는 결과. 도 1은 암시 적으로 열거로 변환 아니므 오브젝트 과부하를 선택한다. 0, 상기 ENUM 과부하를 선택한다.

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

    2.AddWithValue를 사용하는 경우의 차이점은 암시 적 변환이다. 당신이 당신의 실행 SQL 쿼리 (저장 프로 시저) int 형, NVARCHAR, 등의 값을 받아들이는 것을 알고 있다면,에 이유 코드에 다시는-선언하지있다.

    AddWithValue를 사용하는 경우의 차이점은 암시 적 변환이다. 당신이 당신의 실행 SQL 쿼리 (저장 프로 시저) int 형, NVARCHAR, 등의 값을 받아들이는 것을 알고 있다면,에 이유 코드에 다시는-선언하지있다.

    복합 유형 시나리오 (예 날짜 시간, 부동 소수점을 것), 아마 더 스트레이트 포워드 형 시나리오에 대한보다 명시하지만 AddWithValue 이후 (int로 int)를 추가 사용합니다.

  3. ==============================

    3.명시 적으로 command.Parameters.Add에서 같은 유형을 제공하지 않고 ( "ID @", SqlDbType.Int는); 내재적으로는 기대하고 무엇을 입력 변환을 시도합니다.

    명시 적으로 command.Parameters.Add에서 같은 유형을 제공하지 않고 ( "ID @", SqlDbType.Int는); 내재적으로는 기대하고 무엇을 입력 변환을 시도합니다.

    이것의 단점은 암시 적 변환 전환의 가장 최적이 아닐 수 있으며, 성능 저하를 일으킬 수 있다는 것이다.

    여기에 바로이 주제에 대한 토론이있다 : http://forums.asp.net/t/1200255.aspx/1

  4. ==============================

    4.우리는 2 개 개의 매개 변수를 사용) CommandObj.Parameter.Add을 (사용하는 경우, 먼저 절차 파라미터이고 두번째 .AddWithValue ()이 두 파라미터를 취하면서 먼저 절차 파라미터이고, 데이터 타입과 두번째 데이터 변수

    우리는 2 개 개의 매개 변수를 사용) CommandObj.Parameter.Add을 (사용하는 경우, 먼저 절차 파라미터이고 두번째 .AddWithValue ()이 두 파라미터를 취하면서 먼저 절차 파라미터이고, 데이터 타입과 두번째 데이터 변수

    CommandObj.Parameter.Add("@ID",SqlDbType.Int).Value=textBox1.Text;
    

    .AddWithValue에 대한

    CommandObj.Parameter.AddWitheValue("@ID",textBox1.Text);
    

    ID 데이터 타입이 INT 인 저장 프로 시저의 파라미터 어디

  5. ==============================

    5.기능면에서 차이가 없습니다

    기능면에서 차이가 없습니다

    addwithvalue 방법은 값 오브젝트 걸린다. 어떤 유형의 데이터 유형 검사가 없습니다. 데이터 유형은 SQL 테이블과 일치하지 않는 경우 잠재적으로, 그 오류가 발생할 수 있습니다. 추가 방법은 먼저 데이터베이스 유형을 지정해야합니다. 이 이러한 오류를 줄일 수 있습니다.

    자세한 내용은 여기를 클릭하십시오

  6. from https://stackoverflow.com/questions/9999751/difference-between-parameters-addstring-object-and-parameters-addwithvalue by cc-by-sa and MIT license