2016-09-29 6 views
2

я получаю это исключение, когда 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 
+0

Нам нужно будет воспроизвести проблему, чтобы определить, что это такое, можете ли вы представить оператор CREATE TABLE существующей таблицы, определение класса вашей таблицы и код, который вы используете, который имеет проблему (используйте имя реального типа вместо generic 'T' arg) – mythz

+0

Этот запрос выполняется без проблем для меня, используя последнюю версию OrmLite, возможно, это исключение для другого запроса? В противном случае вы можете попробовать использовать последнюю версию OrmLite. – mythz

+0

Спасибо Mythz. Я использую последнюю версию. На самом деле, он отлично работает, когда я не использую последнюю версию. Возможно ли вам протестировать его на SQL Server 2000 SP4? Работы также прекрасны (хотя и не одна и та же таблица и класс) для меня на сервере с более высокой версией SQL Server. Может быть, это уже несовместимо со старой версией SQL Server? – jbrabant

ответ

1

Чтобы ответить на этот вопрос, это работает без проблем на последнюю версию SQL Server.

Основное изменение в OrmLite, которое могло бы повлиять на это поведение, было изменение использования Parameterized SQL Expressions из встроенных параметров SQL.

Вы можете использовать встроенные SQL Params с помощью OrmLite's legacy APIs или сбрасывая вниз, чтобы использовать Custom SQL APIs.

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