在Mono平台运行我的一个ASP.NET程序时,程序 出异常提示:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 4: 参数名无效。
System.Data.SqlClient.SqlException 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 4: 参数名无效。 Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): Mono SqlClient Data Provider. Exception stack trace:
说实话MONO的异常远没有.NET的这么详细。在上面信息中,根本未能定位具体的错误信息。因为该代码在windows系统中正常运行,所以本地开发环境无法捕获该异常。
好吧,只能用排除法,最后将错误定位到了一句数据库查询语句上。
SqlParameter[] parameters = { new SqlParameter("@Slug", SqlDbType.VarChar,50) }; parameters[0].Value = slug; SqlHelper.ExecuteReader("sql 语句略。。。", parameters
考虑到当slug为字母时,一切正常,仅当slug为汉字时才抛出异常,果断将 SqlDbType.VarChar 改成 SqlDbType.NVarChar,问题解决。
附:根据博客园某位博主的经验,当类型为text、VarChar(Max)时也报类似的异常时,可将其对应的size值为-1解决。