[SQL] Parameters.Add (문자열, 객체)와 Parameters.AddWithValue의 차이
SQLParameters.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.기능면에서 차이가 없습니다. 사실, 모두가이 작업을 수행 :
기능면에서 차이가 없습니다. 사실, 모두가이 작업을 수행 :
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.AddWithValue를 사용하는 경우의 차이점은 암시 적 변환이다. 당신이 당신의 실행 SQL 쿼리 (저장 프로 시저) int 형, NVARCHAR, 등의 값을 받아들이는 것을 알고 있다면,에 이유 코드에 다시는-선언하지있다.
AddWithValue를 사용하는 경우의 차이점은 암시 적 변환이다. 당신이 당신의 실행 SQL 쿼리 (저장 프로 시저) int 형, NVARCHAR, 등의 값을 받아들이는 것을 알고 있다면,에 이유 코드에 다시는-선언하지있다.
복합 유형 시나리오 (예 날짜 시간, 부동 소수점을 것), 아마 더 스트레이트 포워드 형 시나리오에 대한보다 명시하지만 AddWithValue 이후 (int로 int)를 추가 사용합니다.
-
==============================
3.명시 적으로 command.Parameters.Add에서 같은 유형을 제공하지 않고 ( "ID @", SqlDbType.Int는); 내재적으로는 기대하고 무엇을 입력 변환을 시도합니다.
명시 적으로 command.Parameters.Add에서 같은 유형을 제공하지 않고 ( "ID @", SqlDbType.Int는); 내재적으로는 기대하고 무엇을 입력 변환을 시도합니다.
이것의 단점은 암시 적 변환 전환의 가장 최적이 아닐 수 있으며, 성능 저하를 일으킬 수 있다는 것이다.
여기에 바로이 주제에 대한 토론이있다 : http://forums.asp.net/t/1200255.aspx/1
-
==============================
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.기능면에서 차이가 없습니다
기능면에서 차이가 없습니다
addwithvalue 방법은 값 오브젝트 걸린다. 어떤 유형의 데이터 유형 검사가 없습니다. 데이터 유형은 SQL 테이블과 일치하지 않는 경우 잠재적으로, 그 오류가 발생할 수 있습니다. 추가 방법은 먼저 데이터베이스 유형을 지정해야합니다. 이 이러한 오류를 줄일 수 있습니다.
자세한 내용은 여기를 클릭하십시오
from https://stackoverflow.com/questions/9999751/difference-between-parameters-addstring-object-and-parameters-addwithvalue by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL에서 곱셈 집계 연산자 (1) | 2020.03.30 |
---|---|
[SQL] SQL Server는 날짜 시간에 대 Varchar로 변환 (0) | 2020.03.30 |
[SQL] 정수 진수와 진수로 정수로 변환 (0) | 2020.03.30 |
[SQL] 는 SQL 표준 역 따옴표 ( ')의 사용에 대해 무엇을 말하는가? (0) | 2020.03.30 |
[SQL] SQL Server 2008의 페이지 매김을 수행하는 방법 (0) | 2020.03.30 |