#2055·Dapper

隐式类型转换运算符可避免需要明确使用 DynamicParameters

作者: AlanSamet创建于 2024年3月13日更新于 2026年8月14日

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