subsonic 3.0 플러그 인 업데이트 문자열 이 너무 길 어서 발생 하 는 이상 복구 방법

최근 에 회사 고객 센터 에서 버그 를 제출 했 는데 제품 의 상세 한 정 보 를 업데이트 할 때 어떤 것 은 업데이트 할 수 없고 얼마 전에 시간 이 없어 서 잠시 내 려 놓 았 는데 방금 또 이런 문제 가 발생 해서 바로 처 리 했 습 니 다프로젝트 솔 루 션 을 열 고 DEBUG 모드 에 들 어가 작업 한 데 이 터 를 제출 한 후 추적 한 결과 제출 할 때 System.Data.sql Client.sql Exception(0x 80131904)이 발생 했 습 니 다.들 어 오 는 표 형식 데이터 흐름(TDS)원 격 프로 세 스 호출(RPC)프로 토 콜 흐름 이 올 바 르 지 않 습 니 다.인자 4("@upxxx"):데이터 형식 0xA 7 의 데이터 길이 나 메타 데이터 길이 가 잘못 되 었 습 니 다.
바 이 두 는 업데이트 문자열 이 너무 길 어서 생 긴 이상 을 발 견 했 습 니 다.매개 변수의 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);
                }
            }
        }

좋은 웹페이지 즐겨찾기