1

ここの Stackoverflow などで、多くの例と質問/回答を調べました。私の C# が Oracle SP を認識しない理由がわかりません。どんな助けでも大歓迎です。

基本目標 -

リターン パラメータ #1 でカーソルを返し、#2 と #3 で 2 つの文字列パラメータが与えられる Oracle SP (以下を参照) があります。

C# から SP を呼び出して、返された結果セットをクラス ExtractCoastalSurvey1SP の C# リストに配置しようとしています。(下に示された)

私のコードは、Nhibernate コマンド GetNamedQuery で爆発します。

Oracle SP、NHibernate マッピング XML ファイル、NHibernate マッピング コード、呼び出しコード、およびランタイム エラー ダンプはすべて以下にあります。

さらに情報が必要な場合は、gmail.com の sblalock までお知らせください。

助けてくれてありがとう。これを解いて我が目に神格に昇格せよ!乾杯し、祝福された日を!

M・スコット・ブラロック

ランタイムエラー

Named query not known: PROC_MASSANDABUNDANCE Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: NHibernate.MappingException: Named query not known: PROC_MASSANDABUNDANCE

Source Error:

Line 7257:////query.SetParameter("SPECIESCODE_IN", "6186020202");
Line 7258: Line 7259: IQuery query = Session.GetNamedQuery("PROC_MASSANDABUNDANCE"); Line 7260: query.SetParameter("PROJECTCODE_IN", "P94"); Line 7261: query.SetParameter("SPECIESCODE_IN", "6186020202");

Source File: C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Service\DBRepository.cs Line: 7259

Stack Trace:

[MappingException: Named query not known: PROC_MASSANDABUNDANCE] NHibernate.Impl.AbstractSessionImpl.GetNamedQuery(String queryName) +509 SEAMAP.Services.DBRepository.ExtractCoastalSurvey1Collection(String[] _AreaArray, String _LatitudeRangeBegin, String _LatitudeRangeEnd, String _YearRangeBegin, String _YearRangeEnd, String _Season, String _State, String _DepthZone, String[] _SelectedMonthArray, String[] _SelectedYearArray, String[] _SelectedScientificNamesArray, String[] _SelectedCommonNamesArray, String[] _SelectedACCSPGridArray) in C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Service\DBRepository.cs:7259 SEAMAP.Controllers.ReportsController.ExtractCoastalSurvey(ExtractCoastalSurveyParameters _model) in C:\Visual Studio 2008\Projects\SEAMAP\SEAMAP\SEAMAP\Controllers\ReportsController.cs:277 lambda_method(ExecutionScope , ControllerBase , Object[] ) +140 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +178 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +24 System.Web.Mvc.<>c_DisplayClassd.b_a() +52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 continuation) +254 System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary2 parameters) +192 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314 System.Web.Mvc.Controller.ExecuteCore() +105 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34 System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 System.Web.Mvc.Async.<>c__DisplayClass81.b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8699438 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

オラクルから

PROCEDURE PROC_MASSANDABUNDANCE 
(p_recordset OUT SYS_REFCURSOR,PROJECTCODE_IN IN VARCHAR2, SPECIESCODE_IN IN VARCHAR2) AS 

BEGIN

OPEN p_recordset FOR

SELECT * FROM TABLE;

END PROC_MASSANDABUNDANCE;

Mappings.HMB.XML ファイル

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="SEAMAP" assembly="SEAMAP" >


  <sql-query name="PROC_MASSANDABUNDANCE" Callable="true">
     <query-param name="PROJECTCODE_IN" type="string" />
     <query-param name="SPECIESCODE_IN" type="string" />

    <return class="SEAMAP.Models.ExtractCoastalSurvey1SP" />

    { call PROC_MASSANDABUNDANCE(:PROJECTCODE_IN :SPECIESCODE_IN) } 

  </sql-query>

</hibernate-mapping>

C# コード

マッピング コード

    private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
               .Database(OracleClientConfiguration.Oracle10
               .ConnectionString(c => c.FromConnectionStringWithKey(connString))
               .ShowSql())
               .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "web"))
               .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Project>())
               .Mappings(m => m.HbmMappings.AddFromAssemblyOf<Project>())
               .BuildSessionFactory();
    }

呼び出しコード

                    IQuery query = Session.GetNamedQuery("PROC_MASSANDABUNDANCE");
                    query.SetParameter("PROJECTCODE_IN", "P94");
                    query.SetParameter("SPECIESCODE_IN", "6186020202");

                    return query.List<ExtractCoastalSurvey1SP>();
4

1 に答える 1

0

スキーマ名をプロシージャに追加するとどうなりますか?[スキーマ]。[手順]のように。

C#アプリケーションのパッケージ化されたコードでは、常にカーソルを最後に置きますが、これはfluent-nhibernateではおそらく必須ではありません。

于 2012-05-24T18:32:49.097 に答える