Я уже немного почесываю голову этим, и я не знаю, что случилось.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, но я ничего не понял из него.
Любая помощь с этим была бы весьма признательна.
Строка 'CreateSQLQuery' лучше всего является строковым литералом, поэтому попробуйте:' results = session.CreateSQLQuery (@ "SELECT * FROM Stats_Table") '. Другим подходом было бы следующее: 'results = session.CreateSQLQuery (@" select {st. *} From stats_table as st ")' – George
Кажется, не работает, но это стоило того. Цените помощь. :) – Crabgor