问题:在执行这句int n = SQLHelper.ExecuteNonQuery(CommandType.StoredProcedure, "[AgentUploadImg]", parame);
有异常:未找到存过过程。存储过程确实在数据库中存在的,其它的存储过程都能找到。我没用过存储过程return返回值,也不知哪不对  O(∩_∩)O谢谢
存储过程代码:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[AgentUploadImg]
(
@xid int
,@path varchar(100)
)
as
begin
declare @return int
select @return=count(xid) from InfoImg where xid=@xid
if(@return>0)
begin
return @return
end
else
begin
insert into InfoImg(xid,[path])values(@xid,@path)
end
end
C#程序代码
 try
            {
                SqlParameter[] parame = { 
                                            new SqlParameter("@xid",SqlDbType.Int),
                                            new SqlParameter("@path",SqlDbType.VarChar,100),
                                             new SqlParameter("@return",SqlDbType.Int)
                                        };
                parame[0].Value = xid;
                parame[1].Value = path;
                parame[2].Direction = ParameterDirection.ReturnValue;
                int n = SQLHelper.ExecuteNonQuery(CommandType.StoredProcedure, "[AgentUploadImg]", parame);                int values = (int)parame[2].Value;
                int num = 0;
                if (values < 6)
                {
                    if (n > 0)
                        num = 1;//上传成功
                    else
                        n = 2;//上传失败
                }
                else
                    num = 0;//已超过5张
                return num;
            }
            catch
            {
                return 2;
            }

解决方案 »

  1.   

    存储过程改下
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER proc [dbo].[AgentUploadImg]
    (
    @xid int
    ,@path varchar(100)
    ,@return int output
    )
    as
    begin
    declare @tempReturn
    select @tempReturn=count(xid) from InfoImg where xid=@xid
    if(@return>0)
    begin
    set @return=@tempReturn
    end
    else
    begin
    insert into InfoImg(xid,[path])values(@xid,@path)
    end
    end外面调用的时候
    你是用微软的那个SQLHELPER还是自己写的 微软那个没提供执行带返回参数的存储过程方法 需要自己写个Sqlcommand cmd=new Sqlcommand(存储过程名,数据库连接对象)
    cmd.CommandType=CommandType.StoreProcedure;
    cmd.Paramerters.Add(你刚才的那几个参数)
    cmd.ExeNonQuery();
    int returnValue=cmd.Parameters["@return"].Value;//这里就是你要的返回值了
      

  2.   

    这里declare @tempReturn 少了数据类型 改下
    declare @tempReturn int;
      

  3.   

    你接受return返回值的代码和我的有什么区别么?
      

  4.   

    这里declare @tempReturn 少了数据类型 改下
    declare @tempReturn int;
      

  5.   

    你的存储过程没有成功编译到数据库中吧,你的存储过程在数据库中根本不能生成怎么会有呢,你在sql执行环境中执行一下你的sql语句看能不能成功
      

  6.   

     int n = SQLHelper.ExecuteNonQuery(CommandType.StoredProcedure, "AgentUploadImg", parame); 不需要[ 中括号 ]
      

  7.   

    直接使用AgentUploadImg
    SqlConnection conn = "";  
    conn.Open();  
    SqlCommand MyCommand = new SqlCommand("", conn);  
    MyCommand.CommandType = CommandType.StoredProcedure;  
    MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));  
    MyCommand.Parameters["@a"].Value = 10;  
    MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));  
    MyCommand.Parameters["@b"].Value = 20;  
    MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));  
    MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;  
    MyCommand.ExecuteNonQuery();  
    Response.Write(MyCommand.Parameters["@return"].Value.ToString());