NHibernate的 - 无法执行查询 - 输入字符串的不正确的格式 [英] NHibernate - Could not execute query - Input string was not in a correct format

查看:1043
本文介绍了NHibernate的 - 无法执行查询 - 输入字符串的不正确的格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在抓我的头,这其中有一段时间了,我无能,什么是错的。

I've been scratching my head with this one for a while now and I'm clueless as to what's wrong.

概述:我有一个两个表MySQL数据库。 。既正确映射到数据库中(我可以加载数据)和我能够查询到一个表,而不是其他。

Overview: I have two tables in a MySQL database. Both map correctly to the database (I can load data in) and I am able to query to one table, but not the other.

我已经研究过解决方案:该表和C#代码,映射问题,SQL格式问题之间的类型转换问题。

Solutions I've looked into: Type conversion issues between the table and the C# code, mapping issues, SQL format issues.

这是失败的代码如下:

Configuration config = new Configuration();
config.Configure();
ISessionFactory sessionFactory = config.BuildSessionFactory();
var schema = new SchemaUpdate(config);
schema.Execute(true, true);
results = session.CreateSQLQuery("SELECT * FROM Stats_Table") // Exception thrown here
    .AddEntity(typeof(TestStats))
    .List<TestStats>();






类:


The class:

public class Stats
{
    public virtual Guid      Id        { get; set; }
    public virtual Guid      TestId    { get; set; }
    public virtual String    Name      { get; set; }
    public virtual TResult   Result    { get; set; }
    public virtual DateTime? Timestamp { get; set; }
    public virtual UInt32    Duration  { get; set; }
    public virtual String    Notes     { get; set; }

    public Stats() 
    {
    }

    public Stats(TestCase tc, TResult Res, DateTime? Time, UInt32 Dura, String ResultNote="")
    {
        Id = Guid.NewGuid();
        TestId = tc.Id;
        Name = tc.TestName;
        Result = Res;
        Timestamp = Time;
        Duration = Dura;
        Notes = ResultNote;
    }

    public Stats(Guid T_Id, string Name, TResult Res, DateTime? Time, UInt32 Dura, String ResultNote="")
    {
        Id = Guid.NewGuid();
        TestId = T_Id;
        Name = Name;
        Result = Res;
        Timestamp = Time;
        Duration = Dura;
        Notes = ResultNote;
    }
}






映射文件:


Mapping file:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Test_Database"
                   namespace="Test_Database.TestClasses">
  <class name="Test_Database.TestClasses.Stats"
         table="Stats_Table"
         lazy="true">

    <id name="Id" column="ID" type="Guid">
      <generator class="assigned" />
    </id>

    <property name="TestId"    column="TestID" />
    <property name="Name"      column="Name" />
    <property name="Result"    column="Result" />
    <property name="Timestamp" column="Timestamp" />
    <property name="Duration"  column="Duration" />
    <property name="Notes"     column="Notes" />

  </class>
</hibernate-mapping>






我得到一个NHibernate的GenericADOException:无法执行query\r\\\
[SELECT * FROM Stats_Table] \r\\\
[SQL:SELECT * FROM Stats_Table]


I get an NHibernate GenericADOException: "could not execute query\r\n[ SELECT * FROM Stats_Table ]\r\n[SQL: SELECT * FROM Stats_Table]"

随着的InnerException:输入字符串是不是在正确的格式为

With an InnerException: "Input string was not in a correct format."

堆栈跟踪:

在System.Number.StringToNumber(字符串str的NumberStyles选项,NumberBuffer和放大器;数的NumberFormatInfo信息,布尔parseDecimal)
在System.Number.ParseInt32(字符串s的NumberStyles样式的NumberFormatInfo信息)
。在系统.String.System.IConvertible.ToInt32(的IFormatProvider提供商)
在System.Convert.ToInt32(对象的值)
在NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert(对象输入)的号码:\\\
hibernate -core\src\NHibernate\Type\PersistentEnumType.cs:\\\
hibernate核心:在NHibernate.Type.PersistentEnumType.AbstractEnumConverter`1.ToObject(类型enumClass,目标代码)的对线88
\src\NHibernate\Type\PersistentEnumType.cs:在NHibernate.Type.PersistentEnumType.GetInstance(目标代码)的普线33
:\\\
hibernate-core\src\NHibernate\Type \PersistentEnumType.cs:在NHibernate.Type.PersistentEnumType.Get线203
(IDataReader的RS,的Int32指数)号码:\\\
hibernate-core\src\NHibernate\Type\PersistentEnumType.cs:线189
在NHibernate.Type.NullableType.NullSafeGet(IDataReader的RS,字符串名称)号码:\\\
hibernate-core\src\NHibernate\Type\NullableType.cs:行253
在NHibernate.Type.NullableType.NullSafeGet(IDataReader的RS,字符串[]名称,ISessionImplementor会话对象所有者)的号码:\\\
hibernate-core\src\NHibernate\Type\NullableType.cs:行195 $ b在NHibernate.Type.AbstractType.Hydrate $ b(IDataReader的RS,字符串[]名称,ISessionImplementor会话对象所有者)的号码:\\\
hibernate-core\src\NHibernate\Type\AbstractType.cs:131线在NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate
(IDataReader的RS,对象ID obj对象,ILoadable rootLoadable,字符串[] [] suffixedPropertyColumns,布尔allProperties,ISessionImplementor会话)的号码:\\\
hibernate-core\ src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:行2518
在NHibernate.Loader.Loader.LoadFromResultSet(IDataReader的RS,我的Int32,obj对象,字符串instanceClass,关键的EntityKey,字符串rowIdAlias,LockMode lockMode,ILoadable rootPersister,ISessionImplementor会话)的号码:\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:在NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader的医生的Int32线989
我,ILoadable的持留,关键的EntityKey,LockMode lockMode,字符串rowIdAlias,的EntityKey optionalObjectKey,在p对象optionalObject,IList的hydratedObjects,ISessionImplementor会话):\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:行944
在NHibernate.Loader.Loader.GetRow(IDataReader的RS,ILoadable [],持久,的EntityKey []键,对象optionalObject,的EntityKey optionalObjectKey,LockMode [] lockModes,IList的hydratedObjects,ISessionImplementor会话)的号码:\\\
hibernate -core\src\NHibernate\Loader\Loader.cs:在NHibernate.Loader.Loader.GetRowFromResultSet(的IDataReader的ResultSet ISessionImplementor会议,queryParameters queryParameters,LockMode [] lockModeArray,的EntityKey optionalObjectKey,IList的行876
hydratedObjects,的EntityKey []键,布尔returnProxies)的号码:\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:行342
在NHibernate.Loader.Loader.DoQuery(ISessionImplementor会议,QueryParameters queryParameters,布尔returnProxies)的号码:\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:行473
在NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor会议,QueryParameters queryParameters布尔returnProxies)的号码:\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:行251
在NHibernate.Loader.Loader.DoList(ISessionImplementor会议,queryParameters queryParameters)的对:\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:行1564

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.String.System.IConvertible.ToInt32(IFormatProvider provider) at System.Convert.ToInt32(Object value) at NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert(Object input) in p:\nhibernate-core\src\NHibernate\Type\PersistentEnumType.cs:line 88 at NHibernate.Type.PersistentEnumType.AbstractEnumConverter`1.ToObject(Type enumClass, Object code) in p:\nhibernate-core\src\NHibernate\Type\PersistentEnumType.cs:line 33 at NHibernate.Type.PersistentEnumType.GetInstance(Object code) in p:\nhibernate-core\src\NHibernate\Type\PersistentEnumType.cs:line 203 at NHibernate.Type.PersistentEnumType.Get(IDataReader rs, Int32 index) in p:\nhibernate-core\src\NHibernate\Type\PersistentEnumType.cs:line 189 at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 253 at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner) in p:\nhibernate-core\src\NHibernate\Type\NullableType.cs:line 195 at NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner) in p:\nhibernate-core\src\NHibernate\Type\AbstractType.cs:line 131 at NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate(IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String[][] suffixedPropertyColumns, Boolean allProperties, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2518 at NHibernate.Loader.Loader.LoadFromResultSet(IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey key, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 989 at NHibernate.Loader.Loader.InstanceNotYetLoaded(IDataReader dr, Int32 i, ILoadable persister, EntityKey key, LockMode lockMode, String rowIdAlias, EntityKey optionalObjectKey, Object optionalObject, IList hydratedObjects, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 944 at NHibernate.Loader.Loader.GetRow(IDataReader rs, ILoadable[] persisters, EntityKey[] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode[] lockModes, IList hydratedObjects, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Loader\Loader.cs:line 876 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 342 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的:

And from NHibernate:

在NHibernate.Loader.Loader.DoList(ISessionImplementor会议,QueryParameters queryParameters)的号码:\\\
hibernate-core\src\NHibernate\Loader \Loader.cs:行p中1573
在NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor会议,queryParameters queryParameters):\\\
hibernate-core\src\NHibernate\Loader\Loader.cs:线1472
在NHibernate.Loader.Loader.List(ISessionImplementor会议,queryParameters queryParameters,ISet`1 querySpaces,ITYPE [] resultTypes)的号码:\\\
hibernate-core\src\NHibernate\Loader\ Loader.cs:线1467
在NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor会议,QueryParameters queryParameters)的号码:\\\
hibernate-core\src\NHibernate\Loader\Custom\CustomLoader的.cs:行276
在NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery,QueryParameters queryParameters,IList的结果)的号码:\\\
hibernate-core\src\NHibernate\Impl\SessionImpl.cs:线2108
在NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification规格,queryParameters queryParameters,IList的结果)的号码:\\\
hibernate-core\src\NHibernate\Impl\SessionImpl.cs:线2091
。在NHibernate.Impl.SessionImpl.List [T](NativeSQLQuerySpecification规范,QueryParameters queryParameters)的号码:\\\
hibernate-core\src\NHibernate\Impl\SessionImpl.cs:2077线
在NHibernate.Impl.SqlQueryImpl.ListT的号码:\\\
hibernate-core\src\NHibernate\Impl\SqlQueryImpl.cs:行163
在TestManager_Database.Program.Main(字串[] args)的C:\Users\cryan\Documents\Visual工作室2010\Projects\TestManager_Database\TestManager_Database\Program.cs:行287
在System.AppDomain._nExecuteAssembly(RuntimeAssembly组装的String []参数)
在System.AppDomain.ExecuteAssembly(字符串assemblyFile,证据assemblySecurity,字串[] args)
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()$ b $在System.Threading.ThreadHelper b .ThreadStart_Context(对象状态)
在System.Threading.ExecutionContext.Run(ExecutionContext中的ExecutionContext,ContextCallback回调,对象状态,布尔ignoreSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext中的ExecutionContext,ContextCallback回调,对象状态)
在System.Threading.ThreadHelper.ThreadStart()

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[T](NativeSQLQuerySpecification spec, QueryParameters queryParameters) in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 2077 at NHibernate.Impl.SqlQueryImpl.ListT in p:\nhibernate-core\src\NHibernate\Impl\SqlQueryImpl.cs:line 163 at TestManager_Database.Program.Main(String[] args) in C:\Users\cryan\Documents\Visual Studio 2010\Projects\TestManager_Database\TestManager_Database\Program.cs:line 287 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.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

我试着经历了NHibernate的源代码,但我没有任何的身影出从它。

I've tried going through the source code for NHibernate but I didn't figure anything out from it.

任何帮助,这将不胜感激。

Any help with this would be greatly appreciated.

推荐答案

您枚举 - TResult可能正在保存为一个字符串值,并试图解析为int值(从错误信息猜测)

Your enum - TResult is probably being saved as a string value and trying to be parsed as an int value (guessing from the error message)

试着改变你的配置为结果属性:

Try changing your config for the result property to:

<property name="Result" column="Result" type="NHibernate.Type.EnumStringType`1[[MyNamespace.TResult, MyAssembly]], NHibernate"/>

其中MyNamespace.TResult,MyAssembly程序是你的枚举TResult

where MyNamespace.TResult, MyAssembly is the fully qualified name of your enum TResult

此外,更改结果列是int:)

Alternatively, change the Result column to be an int :)

这篇关于NHibernate的 - 无法执行查询 - 输入字符串的不正确的格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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