串行写队列的MYSQL大文本参数

本文介绍了一种基于Redis队列的异步数据库写入机制,通过从队列中取出任务并调用存储过程的方式执行数据库操作。文章详细展示了如何处理不同长度的数据参数,并实现了错误处理。
public void AsyncWriteDataBase()
        {
            var spName = "";
            while (true)
            {
                try
                {
                var jsonText = RedisHelper.BlockingPopItemFromList("async_write_list");
                var o = (JObject)JsonConvert.DeserializeObject(jsonText);

                if (o["need_newcache"].ToString() != "0") continue;
                spName=o["action"].ToString();
                var jObject = o["paras"];

                var paras = new MySqlParameter[jObject.Children().Count()];
                var count = 0;
                foreach (JProperty item in jObject.Children())
                {
                    if (item.Value.ToString().Length >=1024)
                    {
                        paras[count] = new MySqlParameter(item.Name, MySqlDbType.MediumText);
                        //var bytes = System.Text.Encoding.UTF8.GetBytes(item.Value.ToString()); 
                        //paras[count].Value = bytes;
                        //如果下面的代码不行,试试上面注释掉的代码
                        paras[count].Value = item.Value.ToString();
                    }
                    else
                    {
                        paras[count] = new MySqlParameter(item.Name, MySqlDbType.VarChar, 1024);
                        paras[count].Value = item.Value;
    
                    }
                    
                    count++;
                }
                  SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.StoredProcedure, spName, paras);
                  Program.myFrm.SetTextMessage("成功写入异步数据库记录,调用的存储过程:" + spName, 3);
                }
                catch (Exception err)
                {
                    Program.myFrm.SetTextMessage("写入异步数据库记录失败,调用的存储过程:" + spName+",错误原因:"+err, 3);
                }
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值