无法使用Nhibernate检索数据 [英] Cannot Retrieve Data with Nhibernate

查看:57
本文介绍了无法使用Nhibernate检索数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标:
从包含三列的行中检索数据到名为aaa的类中

Goal:
Retrieve data from row containing three column into a class named aaa

问题:
-我检索到一条错误消息,因为它没有提供足够的错误说明,因此无法正常工作.

Problem:
-I retrieve a error message that it does not work because it doesn't provide enough with error explanation.

-我认为源代码不正确,无法检索数据并将其粘贴到类中.

-I believe that the source code is not correct to retrieve and paste the data into a class.

信息:
*我正在使用Nhibernate,VS 2013和SQL Server 2012.

Info:
*I'm using Nhibernate, VS 2013 and SQL server 2012.

NHibernate.exceptions.GenericADOException > InnerException > StackTrace

at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
at NHibernate.Driver.NHybridDataReader.GetOrdinal(String name) in p:\nhibernate-core\src\NHibernate\Driver\NHybridDataReader.cs:line 363
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 236
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name, ISessionImplementor session, Object owner) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 287
at NHibernate.Loader.Custom.CustomLoader.ScalarResultColumnProcessor.Extract(Object[] data, IDataReader resultSet, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 458
at NHibernate.Loader.Custom.CustomLoader.ResultRowProcessor.BuildResultRow(Object[] data, IDataReader resultSet, Boolean hasTransformer, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 395
at NHibernate.Loader.Custom.CustomLoader.GetResultColumnOrRow(Object[] row, IResultTransformer resultTransformer, IDataReader rs, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 284
at NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 365
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 473
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 251
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1564



NHibernate.exceptions.GenericADOException > TargetSite

 at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1573
 at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1472
 at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 1467
 at NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Loader\Custom\CustomLoader.cs:line 276
 at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2108
 at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters, IList results) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2091
 at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2067
 at NHibernate.Impl.SqlQueryImpl.List() in p:\nhibernate-core\src\NHibernate\Impl\SqlQueryImpl.cs:line 127
 at NHibernate.Impl.AbstractQueryImpl.UniqueResult() in p:\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 960
 at NHibernate.Impl.AbstractQueryImpl.UniqueResult[T]() in p:\nhibernate-core\src\NHibernate\Impl\AbstractQueryImpl.cs:line 947
 at data_layer.NhibernateDataProvider.RetrieveSpecificContactInfoAboutAPerson(Int32 pPK_kund) in c:\arbete\main_system\data_layer\NhibernateDataProvider.cs:line 260
 at usercontrol_kund.UserControl1.txtbox_sok_KeyDown(Object sender, KeyEventArgs e) in c:\arbete\main_system\usercontrol_kund\usercontrol_kund.xaml.cs:line 108
 at System.Windows.Input.KeyEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
 at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
 at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
 at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
 at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
 at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
 at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
 at System.Windows.Input.InputManager.ProcessStagingArea()
 at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
 at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
 at System.Windows.Interop.HwndKeyboardInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawKeyboardActions actions, Int32 scanCode, Boolean isExtendedKey, Boolean isSystemKey, Int32 virtualKey)
 at System.Windows.Interop.HwndKeyboardInputProvider.ProcessKeyAction(MSG& msg, Boolean& handled)
 at System.Windows.Interop.HwndSource.CriticalTranslateAccelerator(MSG& msg, ModifierKeys modifiers)
 at System.Windows.Interop.HwndSource.OnPreprocessMessage(Object param)
 at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
 at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
 at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
 at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
 at System.Windows.Interop.HwndSource.OnPreprocessMessageThunk(MSG& msg, Boolean& handled)
 at System.Windows.Interop.HwndSource.WeakEventPreprocessMessage.OnPreprocessMessage(MSG& msg, Boolean& handled)
 at System.Windows.Interop.ComponentDispatcherThread.RaiseThreadMessage(MSG& msg)
 at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
 at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
 at System.Windows.Threading.Dispatcher.Run()
 at System.Windows.Application.RunDispatcher(Object ignore)
 at System.Windows.Application.RunInternal(Window window)
 at System.Windows.Application.Run(Window window)
 at System.Windows.Application.Run()
 at main_system.App.Main() in c:\arbete\main_system\main_system\obj\Debug\App.g.cs:line 0
 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
 at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
 at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
 at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
 at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
 at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
 at System.Threading.ThreadHelper.ThreadStart()





<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="data_layer" namespace="data_layer">
  <sql-query name="ddd">
    <return-scalar column="a" type="int" />
    <return-scalar column="b" type="string" />
    <return-scalar column="c" type="string" />
    exec ddd :Data
  </sql-query>
</hibernate-mapping>


public class aaa
{
    public int a { get; set; }
    public string b { get; set; }
    public string c { get; set; }

}


public ContactInfo RetrieveSpecificContactInfoAboutAPerson(int a)
{
    return _session.GetNamedQuery("ddd").SetInt32("Data", a).UniqueResult<aaa>();       

}

EXTEND:显示更新前的原始部分

EXTEND: showing the original part before update

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="data_layer" namespace="data_layer">
  <sql-query name="ddd">
    <return-scalar column="a" type="int" />
    <return-scalar column="b" type="string" />
    <return-scalar column="c" type="string" />
    exec ddd :Data
  </sql-query>
</hibernate-mapping>


public class aaa
{
    public int a { get; set; }
    public string b { get; set; }
    public string c { get; set; }

}


public ContactInfo RetrieveSpecificContactInfoAboutAPerson(int a)
{
    return _session.GetNamedQuery("ddd").SetInt32("Data", a).UniqueResult<aaa>();       

}

推荐答案

需要进行一些调整才能使运行...

There are adjustments needed to make that running...

映射应包含传递的参数定义
(检查第一个元素:<query-param name="Data" type="int"/>)

Mapping should contain the passing param definition
(check the first element:<query-param name="Data" type="int"/>)

<sql-query name="ddd">
    <query-param name="Data" type="int"/>
    <return-scalar column="a" type="int" />
    <return-scalar column="b" type="string" />
    <return-scalar column="c" type="string" />
    exec [dbo].[ddd] :Data
</sql-query>

那应该是NHibernate调用:

That should be the NHibernate call:

var a = 1;
var result = session.GetNamedQuery("ddd")
            .SetInt32("Data", a)
            .SetResultTransformer(Transformers.AliasToBean<aaa>())
            .UniqueResult<aaa>();  

其中最重要的是转换,在NHiernate中称为转换:

Where the essential is the conversion, called transformation in NHiernate:

 .SetResultTransformer(Transformers.AliasToBean<aaa>())

所有人都这样打到SP:

That all being hitting the SP like this:

CREATE PROCEDURE ddd    
    @Data int
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT 1 as A, 'B' as b, 'c' as c
END
GO

这篇关于无法使用Nhibernate检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆