本文主要介绍Dapper插入数据到Oracle数据库或其它数据库时,通过匿名对象传递参数,将参数值设置为空值(null)方法(数据库中的字段设置成是可空的)。

1、错误代码情况

一般情况我们都会认为,将匿名对象的参数值直接设置为null或DBNull应该就可以了,示例代码如下,

  int affecgtRow = 0;
            string sql = @"INSERT INTO  `userrole`
                                    (`GuidMark`,
                                     `UserId`,
                                     `RoleId`,
                                     `AuthorityValue`,
                                     `AuthorityDescription`)
                        VALUES (@GuidMark,
                                @UserId,
                                @RoleId,
                                @AuthorityValue,
                                @AuthorityDescription);";
var p=new{GuidMark=1,RoleId=1,AuthorityValue=null,AuthorityDescription=""};//匿名对象设置参数,null改成DBNull也是有问题的
            using (IDbConnection conn = new OracleConnection(GlobalVariablesManager.G_Strconn))
            {
                affecgtRow = conn.Execute(sql,p );
            }

注意:会报错提示“不支持的列数据类型”错误。

2、使用C#中可空类型来设置参数值为null

  int affecgtRow = 0;
            string sql = @"INSERT INTO  `userrole`
                                    (`GuidMark`,
                                     `UserId`,
                                     `RoleId`,
                                     `AuthorityValue`,
                                     `AuthorityDescription`)
                        VALUES (@GuidMark,
                                @UserId,
                                @RoleId,
                                @AuthorityValue,
                                @AuthorityDescription);";
var p=new{GuidMark=1,RoleId=1,AuthorityValue=(int?)null,AuthorityDescription=""};//将null强转成对应的参数类型的可空类型(Nullable<T>)
            using (IDbConnection conn = new OracleConnection(GlobalVariablesManager.G_Strconn))
            {
                affecgtRow = conn.Execute(sql,p);
            }

推荐文档