有关C# sql 插入数据 null值处理有关问题

有关C# sql 插入数据 null值处理问题
 public static object sqlNull(object str)
        {
            if (str == null || str.ToString().Length <= 0)
            {
                return DBNull.Value;
            }
            else
            {
                return str;
            }
        }

        public static bool RunTrans(StringBuilder sql, List<GL_ACCVOUCH> List_Accvouch)
        {
            bool runflag = false;//判断折行文件是否执行成功
            SqlCommand cmd =DbHelperSQL. Connection.CreateCommand();
            SqlTransaction varTrans = DbHelperSQL.Connection.BeginTransaction();
            cmd.Transaction = varTrans;
            try
            {
                foreach (GL_ACCVOUCH model in List_Accvouch)
                {
                    
                        cmd.Parameters.AddWithValue("@ccheck", sqlNull(model.ccheck));
                        cmd.Parameters[0].IsNullable = true;
                        cmd.Parameters.AddWithValue("@cbook",  sqlNull(model.cbook));            
                        cmd.Parameters.AddWithValue("@ibook",  sqlNull(model.ibook));            
                        cmd.Parameters.AddWithValue("@ccashier",  sqlNull(model.ccashier));            
                        cmd.Parameters.AddWithValue("@iflag", sqlNull(model.iflag));            
                        cmd.Parameters.AddWithValue("@ctext1",  sqlNull(model.ctext1));            
                        cmd.Parameters.AddWithValue("@ctext2",  sqlNull(model.ctext2));            
                        cmd.Parameters.AddWithValue("@cdigest",  sqlNull(model.cdigest));            
                        cmd.Parameters.AddWithValue("@ccode",  sqlNull(model.ccode));            
                        cmd.Parameters.AddWithValue("@cexch_name", sqlNull(model.cexch_name));            
                        cmd.Parameters.AddWithValue("@iperiod", sqlNull(model.iperiod));            
                        cmd.Parameters.AddWithValue("@md",  sqlNull(model.md));            
                        cmd.Parameters.AddWithValue("@mc",  sqlNull(model.mc));            
                        cmd.Parameters.AddWithValue("@md_f",  sqlNull(model.md_f));            
                        cmd.Parameters.AddWithValue("@mc_f",  sqlNull(model.mc_f));            
                        cmd.Parameters.AddWithValue("@nfrat",  sqlNull(model.nfrat));            
                        cmd.Parameters.AddWithValue("@nd_s",  sqlNull(model.nd_s));            
                        cmd.Parameters.AddWithValue("@nc_s",  sqlNull(model.nc_s));            
                        cmd.Parameters.AddWithValue("@csettle",  sqlNull(model.csettle));            
                        cmd.Parameters.AddWithValue("@cn_id",  sqlNull(model.cn_id));            
                        cmd.Parameters.AddWithValue("@dt_date",  Common.DateToNull(sqlNull(model.dt_date)));            
                        cmd.Parameters.AddWithValue("@csign",  sqlNull(model.csign));            
                        cmd.Parameters.AddWithValue("@cdept_id",  sqlNull(model.cdept_id));            
                        cmd.Parameters.AddWithValue("@cperson_id",  sqlNull(model.cperson_id));            
                        cmd.Parameters.AddWithValue("@ccus_id",  sqlNull(model.ccus_id));            
                        cmd.Parameters.AddWithValue("@csup_id",  sqlNull(model.csup_id));            
                        cmd.Parameters.AddWithValue("@citem_id", sqlNull(model.citem_id));            
                        cmd.Parameters.AddWithValue("@citem_class",  sqlNull(model.citem_class));            
           。。。。。。。。。。。。  
                         cmd.CommandText = sql.ToString();
                    cmd.ExecuteNonQuery();
                }
                varTrans.Commit();
                runflag = true;
            }
            catch (Exception ce)
            {
                varTrans.Rollback();
                throw ce;
            }
            return runflag;
        }
       
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public bool Add_Accvouch(List<GL_ACCVOUCH> AccvouchList)
        {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into GL_ACCVOUCH(");
                strSql.Append("ccheck,cbook,ibook,ccashier,iflag,ctext1,ctext2,cdigest,ccode,cexch_name,iperiod,md,mc,md_f,mc_f,nfrat,nd_s,nc_s,csettle,cn_id,dt_date,csign,cdept_id,cperson_id,ccus_id,csup_id,citem_id,citem_class,cname,ccode_equal,iflagbank,iflagPerson,isignseq,bdelete,coutaccset,ioutyear,coutsysname,coutsysver,doutbilldate,ioutperiod,coutsign,coutno_id,doutdate,ino_id,coutbillsign,coutid,bvouchedit,bvouchAddordele,bvouchmoneyhold,bvalueedit,bcodeedit,ccodecontrol,bPCSedit,bDeptedit,inid,bItemedit,bCusSupInput,cDefine1,cDefine2,cDefine3,cDefine4,cDefine5,cDefine6,cDefine7,cDefine8,dbill_date,cDefine9,cDefine10,cDefine11,cDefine12,cDefine13,cDefine14,cDefine15,cDefine16,dReceive,cWLDZFlag,idoc,dWLDZTime,bFlagOut,iBG_OverFlag,cBG_Auditor,dBG_AuditTime,cBG_AuditOpinion,bWH_BgFlag,ssxznum,CErrReason,BG_AuditRemark,cbill,cBudgetBuffer,iBG_ControlResult,NCVouchID,daudit_date,RowGuid,cBankReconNo,cnotetypecode,cnoteno");
                strSql.Append(") values (");
                strSql.Append("@ccheck,@cbook,@ibook,@ccashier,@iflag,@ctext1,@ctext2,@cdigest,@ccode,@cexch_name,@iperiod,@md,@mc,@md_f,@mc_f,@nfrat,@nd_s,@nc_s,@csettle,@cn_id,@dt_date,@csign,@cdept_id,@cperson_id,@ccus_id,@csup_id,@citem_id,@citem_class,@cname,@ccode_equal,@iflagbank,@iflagPerson,@isignseq,@bdelete,@coutaccset,@ioutyear,@coutsysname,@coutsysver,@doutbilldate,@ioutperiod,@coutsign,@coutno_id,@doutdate,@ino_id,@coutbillsign,@coutid,@bvouchedit,@bvouchAddordele,@bvouchmoneyhold,@bvalueedit,@bcodeedit,@ccodecontrol,@bPCSedit,@bDeptedit,@inid,@bItemedit,@bCusSupInput,@cDefine1,@cDefine2,@cDefine3,@cDefine4,@cDefine5,@cDefine6,@cDefine7,@cDefine8,@dbill_date,@cDefine9,@cDefine10,@cDefine11,@cDefine12,@cDefine13,@cDefine14,@cDefine15,@cDefine16,@dReceive,@cWLDZFlag,@idoc,@dWLDZTime,@bFlagOut,@iBG_OverFlag,@cBG_Auditor,@dBG_AuditTime,@cBG_AuditOpinion,@bWH_BgFlag,@ssxznum,@CErrReason,@BG_AuditRemark,@cbill,@cBudgetBuffer,@iBG_ControlResult,@NCVouchID,@daudit_date,@RowGuid,@cBankReconNo,@cnotetypecode,@cnoteno");
                strSql.Append(") ");

                bool flag = RunTrans(strSql, AccvouchList);
                return flag;

        }





参数化参数化查询 '(@ccheck nvarchar(4000),@cbook nvarchar(4000),@ibook int,@ccashi' 需要参数 '@dt_date',但未提供该参数。查询 '(@ccheck nvarchar(4000),@cbook nvarchar(4000),@ibook int,@ccashi' 需要参数 '@dt_date',但未提供该参数。
------解决思路----------------------
你直接输入一个固定的值试试,是不是转换的时候 报错了。能给分吗
------解决思路----------------------
strSql.Append("ccheck,cbook,ibook,ccashier,iflag,ctext1,ctext2,cdigest,ccode,cexch_name,……
strSql.Append("@ccheck,@cbook,@ibook,@ccashier,@iflag,@ctext1……
这两句里有参数@dt_date对应的项吗?仔细查查,可以把长代码复制到记事本检查

再检查下,Common.DateToNull(sqlNull(model.dt_date))输出的是不是一个有效的日期类型
------解决思路----------------------
应该是 Common.DateToNull把值转成了Null然后会爆这样的错误。
你已经sqlNull了,为什么还要在转换一次?

另外,还有2个地方
1. cmd.Parameters[0].IsNullable = true;
    不知道这句的意义何在。

2. foreach开始或者最后的地方,你不clear下你的cmd.Parameters吗?



------解决思路----------------------
Common.DateToNull(sqlNull(model.dt_date)) 
写错了顺序,调一下
sqlNull(Common.DateToNull(model.dt_date))