2014-01-14 2 views
20

언제 Parameters. Add/AddWithValue을 사용해야합니까? 다음 MSDN의 예에서 그들은 당신이 조금 더 작품에 모두 명시 적으로 만들고 싶어 사용 AdddatetimeSqlCommand 매개 변수 Add 또는 AddWithValue 추가

+1

['cmd.Parameters.Add'는 현재 사용되지 않습니다. 대신에'cmd.Parameters.AddWithValue'를 사용하십시오. (http://stackoverflow.com/a/29554589/3936696) –

답변

28

에 사용하는 것이 가장 좋습니다 무엇 string

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

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

에 대한 intParameters.AddWithValue에 대한 Parameters.Add를 사용합니다. 게으른 경우 AddWithValue을 사용하십시오. AddWithValue은 매개 변수의 유형을 파생하므로 올바른 유형인지 확인하십시오. 예를 들어 string에서 int까지 구문 분석해야 올바른 유형을 찾을 수 있습니다.

당신의 매개 변수 유형 인 경우 int 당신이 다음 another overload is chosen with the SqlDbType-enum 이후 overload that takes the parameter-name and an object에주의해야 Add을 피하는 이유 중 하나가 있습니다. remarks에서

: 당신은 정수 매개 변수 값을 지정 SqlParameterCollection.Add 방법이 오버로드를 사용하는

주의하십시오. 이 오버로드는 Object 형식의 값을 사용하므로 의 C# 예제에서 보여 주듯이 값이 0이면 을 정수 형식의 값을 Object 형식으로 변환해야합니다. 이 변환을 수행하지 않는 경우

parameters.Add("@pname", Convert.ToInt32(0)); 

는 컴파일러는 당신이 SqlParameterCollection.Add (문자열, SqlDbType) 오버로드를 호출하려고하는 것으로 가정합니다.

+0

['cmd.Parameters.Add'는 현재 사용되지 않습니다. 대신 cmd.Parameters.AddWithValue'를 사용하십시오. (http://stackoverflow.com/a/29554589/3936696) –

+4

@RahulNikate :'AddWithValue'는 매개 변수 값으로부터 매개 변수 유형을 유추하기 때문에 최선의 방법이 아닙니다 . 이로 인해 종종 잘못된 실행 계획이나 잘못된 전환으로 이어집니다. 또한 처음에 매개 변수의 유효성을 검사하지 않습니다 (즉,'Datetime'을 입력했지만'String'을 전달한 경우). 'Add (String parameterName, Object value)'만이'Add '의 다른 모든 오버로드가 사용되지 않습니다. 필자는 parameter-name과'SqlDbType'을 선호합니다. (string-type의 경우 크기를 고려하십시오.) –

+1

'AddWithValue'는 내 대답에 언급 된 문제를 피하고'Add (string, object)'와 같은 기능을합니다. –