2009-10-21 5 views
0

L2S를 통해 저장 프로 시저를 실행 중이며 '지정된 캐스트가 유효하지 않습니다'라는 메시지가 반환됩니다. 저장된 proc은 수동으로 실행될 때 데이터를 반환하고, 단계를 거치면 "foreach (var row in result)"에서 행 객체를 만들려고 시도 할 때까지 모든 것이 잘됩니다.LinqToSql에서 '지정된 캐스트가 유효하지 않습니다.'

var q = new db(); 
var result = q.GetNearbyLocations(latitude, longitude,searchDistance); 
foreach (var row in result) 
    { 
     var c = new Clinic() 
       { 
        Name = row.CLINIC_NAME.Trim(), 
        Address1 = row.DRADR1.Trim()... 

아이디어가 있습니까?

+0

Clinic.Name, Clinic.Address1, row.CLINIC_NAME 및 row.DRADR1의 데이터 형식은 무엇입니까? –

+0

이 링크는 매우 귀중합니다 ... http://msdn.microsoft.com/en-us/library/ms131092.aspx – Lazarus

답변

1

일반적으로 데이터 유형이 일치하지 않아 발생합니다. 저장 프로 시저가 int를 반환하고 문자열에 매핑되거나 저장된 proc이 varchar (1)을 반환하고 System.Char에 매핑되는 경우.

+0

sproc은 동적으로 문자열 변수를 생성하고 실행합니다. Linq는 이것을 좋아하지 않습니다. Linq가 반환 형식을 올바르게 읽으려면 주석을 달고 동등한 SQL 문을 써야합니다. 어떻게 든 designer.cs 에서처럼 제대로 실행되지 않았습니다. 반환 유형은 레코드 세트가 아니라 int입니다. 나는 sproc을 변경하고 reimported하고 sproc을 문자열 변수를 실행하도록 변경했다. 이제는 모두 행복합니다. 모두 감사합니다. –

1

foreach 문이 실행될 때까지 sporc가 실제로 호출되지 않습니다. 따라서 LINQ to SQL이 sproc에서 반환 한 데이터를 개체에 올바르게 매핑 할 수 있는지 확인하십시오.

관련 문제