1.sql server CLR项目中的存储过程实例:
[SqlProcedure]
public static SqlInt32 spSearchFulltextMall(SqlString keywords, SqlString excludedKeywords, SqlInt32 startRow, SqlInt32 endRow)
{
// 在此处放置代码
int result=-1;
return result;
}
2.在类库中调用以上存储过程,接收存储过程的返回值:
parameters[n] = new SqlParameter("returnValue", SqlDbType.Int);
parameters[n].Direction = ParameterDirection.ReturnValue;
其中n为parameters.Length - 1。
接收返回值:var count = (int)(parameters[parameters.Length - 1].Value ?? 0);
3.问题:
在sql 2005中有返回值,而在sql 2008中有时没有返回值,当把sql server CLR项目重新部署,在大约半天时间内有返回值,之后便恢复到之前无返回值状态。
4.解决办法:
a.修改存储过程:
[SqlProcedure]
public static void spSearchFulltextMall(SqlString keywords, SqlString excludedKeywords, SqlInt32 startRow, SqlInt32 endRow,out SqlString result)
{
// 在此处放置代码
result=-1;
}
b.修改接收参数:
parameters[n] = new SqlParameter("returnValue", SqlDbType.Int);
parameters[n].Direction = ParameterDirection.Output;
其中n为parameters.Length - 1。
接收返回值:var count = (int)(parameters[parameters.Length - 1].Value ?? 0);
至此,存储过程返回值正常。