2016-06-10 51 views
3

目前我正在尝试使用使用SAP Sybase SQL Anywhere 12以及整数。下面的代码运行正常:仅在传递整数时使用命名参数

public class Test 
{ 
    public int Str1 
    { 
     get; 
     set; 
    } 

    public string Str2 
    { 
     get; 
     set; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (SAConnection connection = new SAConnection("...")) 
     { 
      connection.Open(); 

      Test test = connection.Query<Test>("SELECT :Str1 as Str1, :Str2 as Str2", 
       new Test() { Str1 = 35, Str2 = "42" }).FirstOrDefault();      

      Console.WriteLine($"Str1: {test.Str1} | Str2: {test.Str2}"); 
      Console.ReadLine(); 
     } 
    } 
} 

但是,当我改变Str2 = "42"一些string,比我得到下面的异常:

演员42A整数不可能

此异常当我使用以下代码时抛出:

Test test = connection.Query<Test>("SELECT :Str1 as Str1, :Str2 as Str2", 
new Test() { Str1 = 35, Str2 = "42a" }).FirstOrDefault(); 

有没有一些已知的问题?这应该正常工作,因为我只是想传递一个字符串。

编辑

堆栈跟踪:

iAnywhere.Data.SQLAnywhere.SAException(0X80004005):Umwandeln冯 '42A' 奥夫整数nichtmöglich 贝iAnywhere.Data.SQLAnywhere.SACommand。 _ExecuteReader(CommandBehavior commandBehavior,布尔isExecuteScalar,布尔isBeginExecuteReader) bei iAnywhere.Data.SQLAnywhere.SACommand.ExecuteDbDataReader(CommandBehavior行为) bei System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(的CommandBehavior行为) 贝Dapper.SqlMapper.d__61 1.MoveNext() bei System.Collections.Generic.List 1..ctor(IEnumerable的1 collection) bei System.Linq.Enumerable.ToList[TSource](IEnumerable 1源) 贝Dapper.SqlMapper.Query [T](CNN的IDbConnection,字符串SQL,对象PARAM,IDbTransaction交易,布尔缓冲,可空1 commandTimeout, Nullable 1命令类型) 贝DapperSqlAnywhere.Program.Main(字串[] args)在C:\用户.... \ DapperSqlAnywhere \的Program.cs:Zeile 35.

感谢!

+0

你能发布完整的堆栈跟踪吗? – sstan

+0

在你的'Test'中,参数'Str2'设置为什么类型? – Draken

+0

@Draken它总是一个字符串/ varchar。我会尽快发布整个堆栈跟踪 – BendEg

回答

0

我不知道SQLAnywhere的,但在你的第一个SELECT语句中大量被解析为

SELECT 35 as Str1, 42 as Str2 

,因为他们都是整数,这是很好的 你的第二个声明

SELECT 35 as Str1, 42a as Str2 

应该可能是

SELECT 35 as Str1, '42a' as Str2 

所以我会尝试将代码更改为

Test test = connection.Query<Test>("SELECT :Str1 as Str1, ':Str2' as Str2", 
      new Test() { Str1 = 35, Str2 = "42" }).FirstOrDefault(); 
+0

这不起作用,原因比':Str2'将成为输出。而不是它的价值。 – BendEg

+0

不幸的是,我不能复制你的问题,因为我没有SAConnection类,但重点是它最有可能是你的select语句失败,因为SQL不能将该值识别为没有单引号的字符串。你需要找到一种用单引号解析语句的方法。 – JonnyCab