隐式类型转换运算符可避免需要明确使用 DynamicParameters
tl; 医生; `cn.Execute ("Pass @Param as VARCHAR 代替 NVARCHAR",新 {Param = (AnsiString) "MyString" )] ;
我经常使用匿名类型用参数化的SQL语句给Dapper打电话. 由于 SQL 服务器使用 NVARCHAR 优先用于 VARCHAR,我必须明确设置 DbType 到 DbType. AnsiString)是为了让它通过一个VARCHAR而不是一个NVARCHAR;当我做不到这一点时,SQL Server会忽略VARCHAR列上的索引. 我开始使用这一技术 继续通过匿名类型, 同时获得正确的参数类型 利用索引。 我搜索了回放和网络,没有看到它 任何地方,我觉得这可能是 一个有用的模式 "火和忘记" 传递匿名类型 同时通过字符串 作为VARCHAR而不是NVARCHAR。
(a).
SqlMapper.Add TypeHandler(新安西斯通TypeHandler ()) ;
/....
公共类 AnsiString
{
字符串 值;
私有 AnsiString( 字符串值)
{
值=数值;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
公共覆盖布尔等同( 对象? obj) { 返回 value ======= {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
public over int GetHashCode () QQ( value!=无效? value. GetHashCode (): 0);
公用静态隐含运算符字符串( AnsiString value) QQ值. value; 公共静态隐含运算符 AnsiString(字符串值) QQ 新的 AnsiString(值); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
AnsiString TypeHandler: SqlMapper. TypeHandler 公共类 互联网档案馆的存檔,存档日期2007-12-21. { 公开覆盖 AnsiString 吗 ? 参数( 对象值) { 返回( AnsiString ?) 值; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
公共覆盖无效 SetValue( IDbDataParameter 参数), AnsiString ? 数值) { 参数。 值=值!=无效? (字符串) 值: DBNull. 价值; 参数。 DbType = DbType. AnsiString; 互联网档案馆的存檔,存档日期2013-12-02. 参数。 大小=DbString (英语). 默认Length; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? /用户: 使用( var cn = 新的 SqlConnection (连接结构)) { 正在等待 cn. OpenAsync (); ; 等待 cn.ExecuteAsync (@"CREATE Table # Test (Col1 NVARCHAR (20), Col2 VARCHAR (20))
测试
VALUES (@A, @B) (中文(简体) ).
, (@C,@D)),新 {A="TestA", B= (AnsiString)"TestB", C="TestC", D="TestD"};
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
(a).
内容来源: DapperLib/Dapper