2012-08-14 3 views
-2

이 오류에 대한 정보가 많지 않지만이 특정 코드에서 캐스팅을 사용하지 않고있어 매우 유용합니다.LINQ 지정된 캐스트가 유효하지 않습니다.

 var dsn = Request.ServerVariables["HTTP_HOST"].Split('.').First(); 
     using (var ctx = new SharedDataContext("switchcurrent")) 
     { 
      var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN == dsn); 

      if (dbDsn == null) 
      { 
       Session["CurrentDsn"] = "SwitchCurrent"; 
      } 
      else 
      { 
       Session["CurrentDsn"] = dbDsn.DSN; 
       Response.Redirect(String.Format("~/{0}", dbDsn.DefaultPage)); 
      } 
     } 

LINQ 문은 오류가 발생하는 곳입니다. 문이 null을 반환하면 코드는 계속 잘되지만 데이터베이스의 객체와 실제로 일치하는 경우이 오류가 발생합니다.

at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)at System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) at WebApplication1.Default.SetCurrentDsn() in C:\Code\dir\Default.aspx.cs:line 163 at WebApplication1.Default.Page_Load(Object sender, EventArgs e) in C:\Code\dir\Default.aspx.cs:line 32 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean  includeStagesAfterAsyncPoint) 

SiteObject.Dsn는 문자열입니다

편집 (추가 정보)는

오류 메시지 InvalidCastException이 스택 추적입니다. dsn도 그렇습니다.

기본적으로 'localhost'(db에 없음) 인 경우 코드가 전달되지만 일치하는 경우 ('pgande')이 오류가 발생합니다.

+0

어떤 오류가 있습니까? 이것은 런타임 예외입니까 아니면 컴파일러 오류입니까? 런타임 예외 인 경우 메시지, 예외 유형 및 스택 추적 (및 가능한 내부 예외)과 같은이 예외에 대한 정보를 게시하십시오. 컴파일 오류 인 경우 정확한 오류 메시지 en 컴파일러 오류 번호와 정확한 행을 표시하십시오. – Steven

+0

SiteObjects.DSN의 유형은 무엇입니까? – Dave

+0

어떤 유형이 'DSN'입니까? – Jodrell

답변

0

테이블을 내 데이터 컨텍스트로 다시 놓으면 모든 것이 작동합니다. 분명히 뭔가 처음에는 거기에 떨어 뜨린 테이블로 인해 부패했습니다.

1

dsns.DSN을 전송할 수없는 경우이 오류가 발생합니다. 전환을 제공해야 할 수도 있습니다. 난 당신이 이미 시도 생각

var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN.ToString() == dsn.ToString()); 
0

이 시도? 뭔가 링크를 시도해보십시오 "s => s.DSN == dsn.ToString()". 이 정보가 도움이 되었습니까?

+0

거푸집 없음, s.DSN은 이미 문자열입니다 – mgaughan

0

을하지만, DSN을 캐스팅 s.DSN을하지 않아도 될 수있다 :

+0

차이는 없습니다. dsn은 확실히 문자열입니다. 그게 그렇게 힘들어지면 'localhost'는 쿼리에서 null을 반환하고 코드를 중단하지 않지만 쿼리에서 null을 반환하지 않아야하는 'pgande'는 깨지기 쉽습니다. – mgaughan

관련 문제