-2

このエラーに関する情報はあまり得られていませんが、この特定のコードでキャストを使用していないため、かなり迷っています。

        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を返す場合、コードは正常に続行されますが、データベース内のオブジェクトと実際に一致する場合は、このエラーが発生します。

編集(追加情報)

エラーメッセージはInvalidCastExceptionスタックトレースです。

 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は文字列です。dsnもそうです。

基本的に、それが'localhost'(dbにない)の場合、コードは渡されますが、一致する場合('pgande')、このエラーがスローされます。

4

4 に答える 4

1

s.DSNにキャストできない場合dsnは、このエラーが発生します。変換を提供する必要がある場合があります。

于 2012-08-14T14:26:48.737 に答える
0

すでに試したと思いますが、s.DSNではなくdsnをキャストする必要があるのではないでしょうか。リンク「s=>s.DSN == dsn.ToString()」を試してください。これは役に立ちましたか?

于 2012-08-14T14:58:03.493 に答える
0

これを試して:

  var dbDsn = ctx.SiteObjects.FirstOrDefault(s => s.DSN.ToString() == dsn.ToString());
于 2012-08-14T14:29:28.923 に答える
0

最終的にテーブルをデータコンテキストに戻し、すべてが機能しています。明らかに、最初にそこにドロップされたテーブルで何かが破損していました。

于 2012-08-14T15:34:54.560 に答える