я получаю это исключение, когда OrmLite сделать следующий вызов:Вводят SQL Исключение текста не может быть по сравнению
return db.Select<T>(x => x.Name == name && x.PuId == puId).FirstOrDefault();
Exception: "System.Data.SqlClient.SqlException (0x80131904): текст, NTEXT, и типы данных изображений не могут быть сравнены или сортируются, за исключением случаев usingIS NULL или LIKE оператора.
именем является строкой и PUID является Int. Тип отображаются в SQL таблицу, которая не имеет столбцов типа Текст, NText или ima ge вообще.
Когда я смотрю на LastSQLStatement и выполняет его с SQL Server, он работает. Когда я заменить вызов со следующим, он отлично работает слишком
return db.SqlList<T>("SELECT Event_Id, Event_Num, Entry_On, Timestamp, Applied_Product, Source_Event, Event_Status, Confirmed, User_Id, Extended_Info, Comment_Id, PU_Id FROM Events WHERE ((Event_Num = @Event_Num) AND (PU_Id = @PU_Id))",new {Event_Num= "16J2730", PU_Id=91}).FirstOrDefault();
старая версия моей службы отлично работает с тем же кодом. Используя последнюю версию servicestack и ormlite, я получаю эту странную проблему ...
Есть ли в последней версии OrmLite проблемы со старой версией SQL Server? Мы все еще на версии 2000 года. Я использовал оба SQLServer Dialect без везения.
У кого-нибудь есть идея?
Вот что Mythz просил
public ProficyEvent TestGetByName(string name, int puId, bool withDetails = false)
{
using (IDbConnection db = OpenDBConnection())
{
try
{
return db.Select<ProficyEvent>(x => x.Name == name && x.PuId == puId).FirstOrDefault();
}
catch (Exception ex)
{
log.ErrorFormat("Error querying database: {0}", ex.ToString());
throw;
}
}
}
[Alias("Events")]
public class ProficyEvent:IProficyPuEntity
{
[AutoIncrement]
[Alias("Event_Id")]
public int Id { get; set; }
[Ignore]
public string Code { get; set; }
[Ignore]
public string Desc { get; set; }
[Alias("Event_Num")]
public string Name { get; set; }
[Alias("Entry_On")]
public DateTime? LastModified { get; set; }
[Ignore]
public string LastModifiedBy { get; set; }
public DateTime? Timestamp { get; set; }
[Alias("Applied_Product")]
public int? AppliedProductId { get; set; }
[Ignore]
public string AppliedProductName { get; set; }
[Ignore]
public int OriginalProductId { get; set; }
[Ignore]
public string OriginalProductName { get; set; }
[Alias("Source_Event")]
public int? SourceEvent { get; set; }
[Alias("Event_Status")]
public int? EventStatus { get; set; }
[Ignore]
public string EventStatusName { get; set; }
public int Confirmed { get; set; }
[Alias("User_Id")]
public int UserId { get; set; }
[Alias("Extended_Info")]
public string ExtendedInfo { get; set; }
[Ignore]
public string Comment { get; set; }
[Alias("Comment_Id")]
public int? CommentId { get; set; }
[Ignore]
public IEnumerable<ProficyTest> TestResults { get; set; }
[Alias("PU_Id")]
public int PuId { get; set; }
[Ignore]
public string UnitName { get; set; }
[Ignore]
public string LineName { get; set; }
}
CREATE TABLE [dbo].[Events](
[Event_Id] [int] IDENTITY(1,1) NOT NULL,
[Event_Num] [Varchar_Event_Number] NOT NULL,
[PU_Id] [int] NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[Applied_Product] [int] NULL,
[Source_Event] [int] NULL,
[Event_Status] [tinyint] NULL,
[Confirmed] [bit] NOT NULL DEFAULT (0),
[User_Id] [int] NULL,
[Comment_Id] [int] NULL,
[Entry_On] [datetime] NULL,
[Testing_Status] [int] NULL DEFAULT (1),
[Event_Subtype_Id] [int] NULL,
[Start_Time] [Datetime_ComX] NULL,
[Extended_Info] [varchar](255) NULL,
[Converted_Timestamp] [datetime] NULL,
[Orientation_X] [float] NULL,
[Orientation_Y] [float] NULL,
[Orientation_Z] [float] NULL,
[Final_Dimension_Z] [real] NULL,
[Final_Dimension_A] [real] NULL,
[Initial_Dimension_A] [real] NULL,
[Final_Dimension_X] [real] NULL,
[Final_Dimension_Y] [real] NULL,
[Initial_Dimension_Y] [real] NULL,
[Initial_Dimension_Z] [real] NULL,
[Initial_Dimension_X] [real] NULL,
[Conformance] [tinyint] NULL,
[Testing_Prct_Complete] [tinyint] NULL)
CREATE TYPE [dbo].[Varchar_Event_Number] FROM [varchar](25) NOT NULL
CREATE TYPE [dbo].[Datetime_ComX] FROM [datetime] NOT NULL
Нам нужно будет воспроизвести проблему, чтобы определить, что это такое, можете ли вы представить оператор CREATE TABLE существующей таблицы, определение класса вашей таблицы и код, который вы используете, который имеет проблему (используйте имя реального типа вместо generic 'T' arg) – mythz
Этот запрос выполняется без проблем для меня, используя последнюю версию OrmLite, возможно, это исключение для другого запроса? В противном случае вы можете попробовать использовать последнюю версию OrmLite. – mythz
Спасибо Mythz. Я использую последнюю версию. На самом деле, он отлично работает, когда я не использую последнюю версию. Возможно ли вам протестировать его на SQL Server 2000 SP4? Работы также прекрасны (хотя и не одна и та же таблица и класс) для меня на сервере с более высокой версией SQL Server. Может быть, это уже несовместимо со старой версией SQL Server? – jbrabant