2014-03-28 2 views
3

Я уже немного почесываю голову этим, и я не знаю, что случилось.NHibernate - Не удалось выполнить запрос. Строка ввода не была в правильном формате.

Обзор: У меня есть две таблицы в базе данных MySQL. Оба правильно отображают базу данных (я могу загружать данные), и я могу запросить одну таблицу, но не другую.

Решения, на которые я смотрел: Введите проблемы преобразования между таблицей и кодом C#, проблемами с отображением, проблемами формата SQL.

Код, который терпит неудачу следующим образом:

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>(); 

Класс:

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 файла:

<?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: "не удалось выполнить запрос \ г \ п [SELECT * FROM Stats_Table] \ г \ п [SQL: SELECT * FROM Stats_Table]"

С InnerException: «Входная строка была не в правильном формате ».


StackTrace:

в System.Number.StringToNumber (String ул, опции NumberStyles, NumberBuffer & номер, NumberFormatInfo информация, Boolean parseDecimal) на System.Number.ParseInt32 (String с, NumberStyles стиль, NumberFormatInfo данные) на System.String.System.IConvertible.ToInt32 (провайдера IFormatProvider) в System.Convert.ToInt32 (значение объекта) на NHibernate.Type.PersistentEnumType.SystemInt32EnumConverter.Convert (вход объекта) в р: \ nhibernate- core \ src \ NHibernate \ Type \ PersistentEnumType.cs: строка 88 at NHibernate.Type.PersistentEnumType.AbstractEnumConverter`1.ToObject (тип enumClass, код объекта) в p: \ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs: строка 33 в NHibernate.Type.PersistentEnumType.GetInstance (Код объекта) в p: \ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs: строка 203 в NHibernate.Type.PersistentEnumType.Get (IDataReader rs, индекс Int32) в p: \ nhibernate-core \ src \ NHibernate \ Type \ PersistentEnumType.cs: строка 189 в NHibernate.Type.NullableType.NullSafeGet (IDataReader rs, String name) в p: \ nhibernate-core \ src \ NHibernate \ Type \ NullableType.cs: строка 253 в NHibernate.Type .NullableType.NullSafeGet (IDataReader rs, String [] имена, сеанс ISessionImplementor, владелец объекта) в p: \ nhibernate-core \ src \ NHibernate \ Type \ NullableType.cs: строка 195 в NHibernate.Type.AbstractType.Hydrate (IDataReader rs, String [], сеанс ISessionImplementor, владелец объекта) в p: \ nhibernate-core \ src \ NHibernate \ Type \ AbstractType.cs: строка 131 в NHibernate.Persister.Entity.AbstractEntityPersister.Hydrate (IDataReader rs, Object id, Object obj, ILoadable rootLoadable, String [] [] suffixedPropertyColumns, Boolean allProperties, сеанс ISessionImplementor) в p: \ nhibernate-core \ src \ NHibernate \ Persister \ Entity \ AbstractEntityPersister.cs: строка 2518 на NHibernate.Loader.Loader .LoadFromResultSet (IDataReader rs, Int32 i, Object obj, String instanceClass, EntityKey, String rowIdAlias, LockMode lockMode, ILoadable rootPersister, сеанс ISessionImplementor) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 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) в p: \ nhibernate- core \ src \ NHibernate \ Loader \ Loader.cs: строка 944 в NHibernate.Loader.Loader.GetRow (IDataReader rs, ILoadable [] persisters, EntityKey [] keys, Object optionalObject, EntityKey optionalObjectKey, LockMode [] lockModes, IList hydratedObjects , Сеанс ISessionImplementor) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 876 в NHibernate.Loader.Loader.GetRowFromResultSet (IDataReader resultSet, сеанс ISessionImplementor, QueryParameters queryParameters, LockMode [] lockModeArray, EntityKey optionalObjectKey , IList hydratedObjects, EntityKey [], Boolean returnProxies) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 342 в NHibernate.Loader.Loader.DoQuery (сеанс ISessionImplementor, QueryParameters queryParameters, логические обратные преобразования) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 473 в NHibernate. Loader.Loader.DoQueryAndInitializeNonLazyCollections (сеанс ISessionImplementor, QueryParameters queryParameters, Boolean returnProxies) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 251 в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters) в р: \ NHibernate-ядра \ SRC \ NHibernate \ Loader \ Loader.cs: линия 1564


И от NHibernate:

в NHibernate.Loader.Loader.DoList (сеанс ISessionImplementor, QueryParameters queryParameters) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 1573 в NHibernate.Loader.Loader.ListIgnoreQueryCache (сеанс ISessionImplementor, QueryParameters queryParameters) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 1472 в NHibernate.Loader.Loader.List (сеанс ISessionImplementor, QueryParameters queryParameters, ISet`1 querySpaces, IType [] resultTypes) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Loader.cs: строка 1467 в NHibernate.Loader.Custom.CustomLoader.List (сеанс ISessionImplementor, QueryParameters queryParameters) в p: \ nhibernate-core \ src \ NHibernate \ Loader \ Custom \ CustomLoader.cs: строка 276 в NHibernate.Impl.SessionImpl.ListCustomQuery (ICustomQuery customQuery, QueryParameters queryParameters, результаты IList) в p: \ nhibernate-core \ src \ NHibernate \ Impl \ SessionImpl.cs: строка 2108 в NHibernate.Impl.SessionImpl.List (спецификация NativeSQLQuerySpecification, QueryParameters queryParameters, результаты IList) в p: \ nhibernate-core \ src \ NHibernate \ Impl \ SessionImpl.cs: строка 2091 в NHibernate.Impl.SessionImpl.List [T] (спецификация NativeSQLQuerySpecification, QueryParameters queryParameters) в p: \ nhibernate-core \ src \ NHibernate \ Impl \ SessionImpl.cs: строка 2077 в NHibernate.Impl.SqlQueryImpl.ListT в p: \ nhibernate-core \ src \ NHibernate \ Impl \ SqlQueryImpl.cs: строка 163 в TestManager_Database.Program.Main (String [] args) в C: \ Users \ cryan \ Documents \ Visual Studio 2010 \ Projects \ TestManager_Database \ TestManager_Database \ Program.cs: строка 287 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String [] args) в System.AppDomain.Execute Сборка (String assemblyFile, фактические данные assemblySecurity, String [] арг) на Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, состояние объекта, Boolean ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, состояния объекта) на System.Threading.ThreadHelper.ThreadStart()

Я пытался идти через исходный код для NHibernate, но я ничего не понял из него.

Любая помощь с этим была бы весьма признательна.

+0

Строка 'CreateSQLQuery' лучше всего является строковым литералом, поэтому попробуйте:' results = session.CreateSQLQuery (@ "SELECT * FROM Stats_Table") '. Другим подходом было бы следующее: 'results = session.CreateSQLQuery (@" select {st. *} From stats_table as st ")' – George

+1

Кажется, не работает, но это стоило того. Цените помощь. :) – Crabgor

ответ

5

Ваше перечисление - TResult, вероятно, сохраняются в виде строкового значения и пытается быть разобрано как целочисленное значение (угадывание из сообщения об ошибке)

Попробуйте изменить конфигурации для свойства результатов для:

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

где MyNamespace.TResult, MyAssembly это полное имя вашего перечисления TResult

в качестве альтернативы, изменить столбец Результат быть ИНТ :)

+0

TResult фактически хранится как enum в базе данных, но я попробую это! Спасибо – Crabgor

+0

Это действительно сработало. Приятно удивлен. Очень признателен! – Crabgor

Смежные вопросы