2014-05-08 125 views
1

我需要將參數傳遞給SQL語句,使用Firebird ADO一切正常,但是與InterBase ADO有一個問題。 我的代碼:Dapper映射字符串參數爲AnsiString

result = conn.Query<DestClass>(sqlCmd, new 
{ 
    stringParam = stringVal, 
    intParam1 = intVal1, 
    intParam2 = intVal2 
}).Single(); 

有了,我已經得到了FormatException,但是當我定義參數與DynamicParameters和設置DbType.AnsiString爲StringParam中,SQL效果很好。但是當我需要傳遞字符串時,我在代碼中有很多地方,我不想在所有地方改變它。

然後我發現我可以使用Dapper.SqlMapper.AddTypeMap(typeof(String), DbType.AnsiString); 但我不能。我有Common Language Runtime detected an invalid program.

如何解決此問題?

編輯

它看起來像問題在小巧玲瓏V1.22解決。

回答

3

有補充形式的組件級屬性的建議:

[assembly:SomeName(blah)] 

,將控制所有類型的從組件來的默認字符串類型。這可能會實現你所需要的大部分(儘管它會以另一種方式推動擺動,所以你需要告訴其他使用什麼)。我目前非常積極地攻擊小巧,所以我期望在短期內實現這一目標。

請注意,您不需要使用DynamicParameters;你也可以使用:

stringParam = new DbString { Value = stringVal, IsAnsi = true } 
+0

有趣的提議,但我的直覺反應是不舒服的API的想法,他的行爲取決於調用程序集中的屬性。性能,內聯和可維護性(特別是通過將類移動到不同的組件中可以改變行爲的事實)? – Joe

+0

@Joe il-merge確實會使事情複雜化 –

+0

感謝您的迴應,但'stringParam = new DbString {Value = stringVal,IsAnsi = true}'不起作用。只有當我用'DynamicParameters'傳遞參數時,它才能正常工作。你能向我解釋我應該如何使用'[assembly:SomeName(blah)]'? –