public int Login(Assess.Model.PersonDatum model)
        {
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand dbcommand = db.GetStoredProcCommand("usp_PersonLogin");
            db.AddOutParameter(dbcommand, "ReturnValue", DbType.Int32, 4);
            db.AddOutParameter(dbcommand, "RatioValue", DbType.Int32, 4);
            db.AddInParameter(dbcommand, "DepartMent", DbType.AnsiString, model.Section);
            db.AddInParameter(dbcommand, "LoginName", DbType.AnsiString, model.Name);
            db.AddInParameter(dbcommand, "LoginPWD", DbType.AnsiString, model.PersonPWD);
            db.ExecuteNonQuery(dbcommand);            return (int)db.GetParameterValue(dbcommand, "ReturnValue");  
        }如何返回 RatioValue 值 在c# 如何获取?

解决方案 »

  1.   

    string RatioValue = Convert.ToString(dbcommand.Parameters["RatioValue"]);
      

  2.   

    我是想问,在这个dal 里面是不是只能 用一个return
      

  3.   

    提供你个思路,
    如下
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    CREATE PROCEDURE [dbo].[test]
     @number int
    AS
    BEGIN
    declare  @a int
    declare  @b int
    if @number=1
     begin
      set @a= 11
          set @b=101
     end
    if @number=2
     begin
      set @a= 22
          set @b=202
     end
    if @number=3
     begin
      set @a= 33
          set @b=303
     end
    select @a,@b
    ENDexec test 2
    返回
    22 202
      

  4.   

    public int Login(Assess.Model.PersonDatum model,out int ratioValue) 
            { 
                Database db = DatabaseFactory.CreateDatabase(); 
                DbCommand dbcommand = db.GetStoredProcCommand("usp_PersonLogin"); 
                db.AddOutParameter(dbcommand, "ReturnValue", DbType.Int32, 4); 
                db.AddOutParameter(dbcommand, "RatioValue", DbType.Int32, 4); 
                db.AddInParameter(dbcommand, "DepartMent", DbType.AnsiString, model.Section); 
                db.AddInParameter(dbcommand, "LoginName", DbType.AnsiString, model.Name); 
                db.AddInParameter(dbcommand, "LoginPWD", DbType.AnsiString, model.PersonPWD); 
                db.ExecuteNonQuery(dbcommand);             ratioValue = (int)db.GetParameterValue(dbcommand, "RatioValue");//在return之前将out参数赋值              return (int)db.GetParameterValue(dbcommand, "ReturnValue");  
            }
      

  5.   

    楼上几位,我是想说,我想得到两个返回参数的值
    但c# 好像只能有一个return 
    而且在  .cs 文件里面取值是这样子的int aa  = blllogin(modelLogin)这里的modellogin
     modelLogin.deparment = 'test';
    modelLogin.LoginName = 'test';
    modelLogin.LoginPWD = strLoginPWD;我是想取回两个返回参数的值
      

  6.   

    你看我的思路了吗?
    我的意思就是你在你的存储过程当中定义两个变量。
    然后select这两个变量。
    就相当与你返回了这两个值
    declare  @a int
    declare  @b int
        if @number=1
         begin
          你的处理过程
          set @a= 第一个返回值
          set @b=第二个返回值  
       end
     select @a,@b
    这样让存储过程返回一张表。
    你分别取内容就可以了。
      

  7.   

    sant11 我明白你的思路
    我是想问在dal 中如何写返回两个值楼上的,两个变量放在一起,用逗号,这样子是不行的。
      

  8.   

    ALTER PROCEDURE [dbo].[test]
     @number int out,
     @number1 int out
    AS
    BEGIN
     set @number=1
     set @number1=2
    END
    你这样试试
      

  9.   

    ALTER PROCEDURE [dbo].[test]
     @number int out,
     @number1 int out
    AS
    BEGIN
     select @number=1
     select @number1=2
    END
    或这样试试
      

  10.   

    要返回两个值,使用关键词out即可;private string getTowValues(out string inValues)
    {
       inValues = "1";
       return = "2";
    }GOOGLE一下C# OUT就懂了~~
      

  11.   

    如果照五楼那样子在return 之前把返回参数赋值那么在 web 中 .cs 的文件如何取得
      

  12.   

    这里感谢 Sant11 的回贴,但存储过程返回参数这方面是没有问题另,返回一个数组也是不行的
      

  13.   


    引用之前先定义int类型变量int mmm;int nnn = Login(model,out mmm);之后结果是 : mmm=ratioValue; nnn=ReturnValue;//这两句不用再写了,前面已经完成了赋值工作,这里只是说明mmm和nnn的状态