MONO中sql“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确”解决方法

翅膀的初衷

发表于2015-03-31 16:13:42

在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解决。