subsonic3.0插件更新字符串过长引发的异常修复方法_实用技巧

最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下。


打开项目解决方案,进入DEBUG模式,拿到操作的数据提交后进行追踪,发现提交时产生了:System.Data.SqlClient.SqlException (0x80131904): 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 4 ("@up_xxx"): 数据类型 0xA7 的数据长度或元数据长度无效。

百度一下发现是由于更新字符串过长引发的异常,必须将参数的Size设置为-1才行,所以按下图处理

复制代码 代码如下:

private static void AddParams(DbCommand cmd, QueryCommand qry)
        {
            if(qry.Parameters != null)
            {
                foreach(QueryParameter param in qry.Parameters)
                {
                    DbParameter p = cmd.CreateParameter();
                    p.ParameterName = param.ParameterName;
                    p.Direction = param.Mode;
                    p.DbType = param.DataType;
                    /*
                     * 修 改 人:Empty(AllEmpty)
                     * 修改说明:修改提交的字符串长度过长产生的Bug
                     * 异常信息:System.Data.SqlClient.SqlException (0x80131904): 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。
                     *           参数 4 ("@up_xxx"): 数据类型 0xA7 的数据长度或元数据长度无效。
                     *********************************************/
                    if (param.DataType.ToString() == "AnsiString")
                    {
                        p.Size = -1;
                    }

                    //output parameters need to define a size
                    //our default is 50
                    if(p.Direction == ParameterDirection.Output || p.Direction == ParameterDirection.InputOutput)
                        p.Size = param.Size;

                    //fix for NULLs as parameter values
                    if(param.ParameterValue == null)
                    {
                        p.Value = DBNull.Value;
                    }
                    else if(param.DataType == DbType.Guid)
                    {
                        string paramValue = param.ParameterValue.ToString();
                        if (!String.IsNullOrEmpty(paramValue))
                        {
                            if(!paramValue.Equals("DEFAULT", StringComparison.InvariantCultureIgnoreCase))
                                p.Value = new Guid(paramValue);
                        }
                        else
                            p.Value = DBNull.Value;
                    }
                    else
                        p.Value = param.ParameterValue;

                    cmd.Parameters.Add(p);
                }
            }
        }

时间: 2024-10-03 15:59:57

subsonic3.0插件更新字符串过长引发的异常修复方法_实用技巧的相关文章

subsonic3.0插件更新字符串过长引发的异常修复方法

 这篇文章主要介绍了subsonic3.0插件更新字符串过长引发的异常修复方法,需要的朋友可以参考下 最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下.   打开项目解决方案,进入DEBUG模式,拿到操作的数据提交后进行追踪,发现提交时产生了:System.Data.SqlClient.SqlException (0x80131904): 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确

SqlCommandBuilder类批量更新excel或者CSV数据的方法_实用技巧

当你批量操作数据的时候,常常会使用到update table1 from table2的这种方式,这种方式是最简洁的. 但当你从excel或者CSV文件更新海量数据时,再使用这种方法,那性能是不是好?字符串拼接又何其之多,大数据是不是需要分组更新? 我不想去检测各种方法的速度,因为我个人比较认可以下方式,欢迎大家批评与指正. 我需要使用到的类主要是SqlCommandBuilder. /// <param name="table">准备更新的DataTable新数据<

Asp.net 字符串操作基类(安全,替换,分解等)_实用技巧

/********************************************************************************** * * 功能说明:常用函数基类 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2006-8-13 * * *******************************************************************************/ /***********************

asp.net更新指定记录的方法_实用技巧

本文实例讲述了asp.net更新指定记录的方法.分享给大家供大家参考.具体方法如下: 我们先来看html页面: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>  <form id="form1" runat="se

10个.NET中删除空白字符串的方法_实用技巧

我们有无数方法可用于删除字符串中的所有空白,但是哪个更快呢? 介绍 如果你问空白是什么,那说起来还真是有些乱.许多人认为空白就是SPACE 字符(UnicodeU+0020,ASCII 32,HTML ),但它实际上还包括使得版式水平和垂直出现空格的所有字符.事实上,这是一整类定义为Unicode字符数据库的字符. 本文所说的空白,不但指的是它的正确定义,同时也包括string.Replace(" ", "")方法. 这里的基准方法,将删除所有头尾和中间的空白.这就

asp.net中C#获取字符串中汉字的个数的具体实现方法_实用技巧

符串可以包括数字,字母,汉字或者其他的字符.使用Char类型的IsDigit静态方法可以判断字符串中的字符是否为数字,使用Char类型中的IsLetter静态方法可以判断字符串中是否为字母.我们来实现一种方法来实现判断字符串中是否为汉字,通过此方法可以计算字符串中汉字的个数,运行效果如图: 首先根据效果图设置好Form的界面和内容,Box1.Text为输入的字符串,我们对该字符串的处理,来计算汉字的个数,双击Buton控件,编辑其单击事件代码. 我们看下汉字的Unicode范围,普遍给出了0x4

解决asp.net mvc UpdateModel更新对象后出现null问题的方法_实用技巧

在用asp.net mvc 4.0做项目的时候遇到的这种情况:情况分析: "在填写表单的时候,有一些表单没有填写,留空,然后直接post 提交表单,action中用UpdateModel 来更新model,结果发现那些没有填写的表单字段全部变成null."原因分析: 项目中做了判断null不能提交更新到数据库中,所以导致一直提交不上去 后来网上查了一下找到了解决办法,我在这里分享一下,方便以后遇到这种情况的朋友可以方便解决解决方法:新建一个类继承DefaultModelBinder u

asp.net 2.0里也可以用JSON的使用方法_实用技巧

全部代码如下.  复制代码 代码如下: /// <summary> /// JSON解析类 /// </summary> public static class JSONConvert { #region 全局变量 private static JSONObject _json = new JSONObject();//寄存器 private static readonly string _SEMICOLON = "@semicolon";//分号转义符 pri

Asp.Net中的字符串和HTML十进制编码转换实现代码_实用技巧

Asp.Net将字符串转为区码位编码,或者将区码位编码字符串转为对应的字符串内容. 数字;这种编码其实就是将单个字符转为对应的区码位(数字),然后区码位前缀加上"",后缀加上";"组成,对于这种编码的字符串,浏览器会自动解析为对应的字符. Asp.Net字符串和编码转换源代码和测试代码如下: using System; using System.Text.RegularExpressions; public partial class purchase_proper