-- =============================================
-- Description: <sp_JimProc_GetComID>
-- 登陆的时候,根据帐号所在部门ID来获得上级部门,乃至于其所在公司ID 
-- ItemLevel = 1 是公司, 是从1开始(不是从0开始)1,2,3....
-- =============================================
ALTER PROCEDURE [dbo].[sp_JimProc_GetComID] 
@DepartmentID int,
    @ItemLevel int,
    @aimID   int output  
AS
declare @swapLevel   int
declare @Parentid  intselect @swapLevel=ItemLevel,@Parentid=Parentid from Admin_Department where DepartmentID=@DepartmentID
set @aimID=@Parentid
while @swapLevel > @ItemLevel
begin
select @swapLevel=ItemLevel,@Parentid=Parentid from Admin_Department where DepartmentID=@Parentid
set @aimID=@Parentid
end//下面是连接类里面的一个函数,但是没有办法执行啊,改怎么返回上面取得的一个ID呢?
// 执行存储过程,并返回数据  DataTable
    public DataTable ExecutePorcedureGetDataTable(string procName, SqlParameter[] coll)
    {
        try
        {
            openDataBase();// 这是打开数据库
            for (int i = 0; i < coll.Length; i++)
            {
                comm.Parameters.Add(coll[i]);
            }            comm.CommandType = CommandType.StoredProcedure;
            comm.CommandText = procName;            da.SelectCommand = comm;
            da.Fill(dt);
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            comm.Parameters.Clear();
            closeDataBase();//关闭数据库
        }
        return dt;
    }
   
//通过下面几句来调用//取出该帐号所在公司的ID
            SqlParameter para = new SqlParameter("@DepartmentID", SqlDbType.Int);
            SqlParameter para1 = new SqlParameter("@ItemLevel", SqlDbType.Int);
            para.Value = 13;
            para1.Value = 1;            SqlParameter[] spList = { para, para1 };
            DataTable mydt = this.myconn.ExecutePorcedureGetDataTable("sp_JimProc_GetComID", spList);没有办法执行啊? 
ExecutePorcedureGetDataTable 执行其他存储过程是正确的
sp_JimProc_GetComID在数据库里面执行也是正确的两个在一块就不行了

解决方案 »

  1.   

    SqlParameter para = new SqlParameter("@DepartmentID", SqlDbType.Int);
                SqlParameter para1 = new SqlParameter("@ItemLevel", SqlDbType.Int);怎么没有那个输出参数?
      

  2.   

    自己回答:  存储过程写成下面就解决了:Create PROCEDURE [dbo].[sp_JimProc_GetComID2] 
    @DepartmentID int,
        @ItemLevel int
          
    AS
    declare @swapLevel   int
    declare @Parentid  int
    declare @aimID int
    select @swapLevel=ItemLevel,@Parentid=Parentid from Admin_Department where DepartmentID=@DepartmentID
    set @aimID=@Parentid
    while @swapLevel > @ItemLevel
    begin
    select @swapLevel=ItemLevel,@Parentid=Parentid from Admin_Department where DepartmentID=@Parentid
    set @aimID=@Parentid
    end//通过下面几句来调用//取出该帐号所在公司的ID
                SqlParameter para = new SqlParameter("@DepartmentID", SqlDbType.Int);
                SqlParameter para1 = new SqlParameter("@ItemLevel", SqlDbType.Int);
                para.Value = 13;
                para1.Value = 1;            SqlParameter[] spList = { para, para1 };
                DataTable mydt = this.myconn.ExecutePorcedureGetDataTable("sp_JimProc_GetComID", spList);
    Int32 companyID= Int32.parse(mydt.rows[0][0].tostring())
    这样就可以获得了