很奇怪的问题,是一个存储过程报的错误
SqlParameter[] NoteParams = new SqlParameter[7];
NoteParams[0] = new SqlParameter("@UserID",str_JoinUserID);
NoteParams[1] = new SqlParameter("@GroupID",int_GroupID.ToString());
NoteParams[2] = new SqlParameter("@NoteTitle",str_NoteTitle);
NoteParams[3] = new SqlParameter("@NoteBody",str_NoteBody);
NoteParams[4] = new SqlParameter("@LastIP",Request.UserHostAddress);
NoteParams[5] = new SqlParameter("@GroupUserPower","5");
NoteParams[6] = new SqlParameter("@NoteID",SqlDbType.Int);
NoteParams[6].Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(ZS_Config.ConnStr,CommandType.StoredProcedure,"SP_AddNote",NoteParams);主要问题应该是NoteBody这个参数,是nText类型的,用户在使用的时候有时会报这个错误,比例非常小,但是每天会有4-5次错误产生。基本排除是超长引起的,因为长度都做了控制。唯一一次本地的重现是发现如果str_NoteBody中出现了一段javascript脚本,则会出错,可是后来又无法重现了。不知道有没有朋友碰到过类似的问题。

解决方案 »

  1.   

    那就NoteParams[3] = new SqlParameter("@NoteBody",Server.HtmlEncode(str_NoteBody));试试
      

  2.   

    显示前记得解码:
    str_NoteBody=Server.HtmlDecode(str_NoteBody)
      

  3.   

    SqlParameter[] NoteParams = new SqlParameter[7];
    NoteParams[0] = new SqlParameter("@UserID",str_JoinUserID);
    NoteParams[1] = new SqlParameter("@GroupID",int_GroupID.ToString());
    NoteParams[2] = new SqlParameter("@NoteTitle",str_NoteTitle);
    NoteParams[3] = new SqlParameter("@NoteBody",str_NoteBody);
    NoteParams[4] = new SqlParameter("@LastIP",Request.UserHostAddress);
    NoteParams[5] = new SqlParameter("@GroupUserPower","5");
    NoteParams[6] = new SqlParameter("@NoteID",SqlDbType.Int);
    NoteParams[6].Direction = ParameterDirection.Output;最好改成:
     SqlParameter[] NoteParams = new SqlParameter[7];
            NoteParams[0] = new SqlParameter("@UserID",SqlDbType.VarChar);
    。。
    NoteParams[0].Value = str_JoinUserID;