2016-06-10 31 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