2009-03-21 8 views
0

" SelectCommand에 ="직원들의 직원 ID, 이름, 성, 제목, 도시를 선택 WHERE 도시 = @ 도시 "> Ado.net은 저장 프로 시저에 값이나 형식을 전달합니까?

A) 나는 가정 당신은 어떤 유형의 매개 변수의 지정하지 않을 때 인스턴스 "City"는 자동으로 Object 유형이며, 나중에 에 모든 유형의 값을 할당 할 수 있습니다. 따라서 City가 나중에 (예 : SqlDataSource2_Selecting() 이벤트 핸들러에 ) 값이 잘못된 유형,이 잘못된 할당은 Sql s에서만 탐지됩니다. erver, 그리고 not before (물론 SQL 서버는 웹 서버에 에러 를보고 할 것입니다)?

B) 우리 형 NVARCHAR의 SqlParameter에 인스턴스 (20)를 생성하고 저장 과정이 매개 변수를 통과 원하는 경우 프로 시저이 파라미터 단지 값을 전달 ADO.NET 것 또는 어떻게 든이 매개 변수의 정확한 유형을 프로 시저에 알립니다 ( 은 NVarChar (20) 임).

고맙습니다

답변

1

파라미터 값이 저장되어있는 데이터 유형 항상 object이다. 형식을 지정하지 않으면 드라이버는 할당 된 값의 데이터 형식을 기반으로 데이터베이스 데이터 형식을 추측하므로 원하는 형식을 지정하는 것이 안전합니다.

데이터 유형 (NVarChar)은 데이터베이스에 전달 될 수 있습니다. 실제로는 그렇지 않지만 길이는 그렇지 않습니다. 지정된 길이는 데이터베이스로 보내지는 데이터 만 제한하며 저장 프로시 듀어에 지정된 길이와 일치 할 필요는 없습니다 (그러나 일반적으로 그렇게해야합니다). 저장 프로 시저에 지정된 길이보다 긴 길이를 사용하면 드라이버가 저장 프로 시저가 받아들이기에는 너무 긴 값을 보낼 수 있습니다.

데이터 유형이 데이터베이스로 전송되는지 여부에 관계없이 올바른 방식으로 값을 전송하는 데 사용됩니다.

+0

Ado.Net이 매개 변수 값을 다시 데이터베이스로 전달할 때 이러한 매개 변수가 내부적으로 어떻게 나타 났습니까? 이것은 Ado.Net이 Int32 매개 변수를 제공하기 전에 SQL Server에 전송하기 전에이 값과 동일한 비트 표현이 SQL Server에 있어야한다는 의미입니다. – SourceC

1

매개 변수는 SQL Server에 의해 설정되며 ADO가 실제로 서버와 통신 할 때 매개 변수에 지정된 유형이 데이터와 함께 전달되지 않습니다. 그래서 네, 잘못된 데이터 유형을 지정하는 것은 전적으로 가능하며 SQL Server가 오류를 반환 할 때까지는 알 수 없습니다.

B와 마찬가지로 ... 데이터 만 전송됩니다.

+0

도움을 주셔서 감사합니다. – SourceC

3

아니요, 아니요, SQL Server는 저장 프로 시저 호출에서 매개 변수의 유형을 알 수 없습니다. 매개 변수를 전달하면 올바른 형식으로 변환하고 변환 할 수없는 경우 불만을 제기합니다.

관련 문제