CREATE PROCEDURE dbo.Cup_Work_GetCaseCount
(
@BeginTime [datetime],
@EndTime  [datetime] ,
        @CaseCount1 [int] output
)
AS
select @CaseCount1=count(distinct obj_caseid)  from C_Work_Object  where Obj_casetype='爆炸' and Obj_domethod='刑拘' and Obj_dotime between  @BeginTime and  @EndTime 
GO
//以上为存储过程//以下是提供输入参数的方法 public void GetCaseCount(DateTime timeStart,DateTime timeEnd)
    {
        SqlParameter[] parameters =
        {
            new SqlParameter("@BeginTime",SqlDbType.DateTime,8),
            new SqlParameter("@EndTime",SqlDbType.DateTime,8)
        };
        parameters[0].Value=timeStart;
        parameters[1].Value = timeEnd;        DataSet ds = this.dbProcessor.RunProcedure("Cup_Work_GetCaseCount", parameters, "GetCaseCountInfo");
        DataTable dt = ds.Tables["GetCaseCountInfo"];    }
//页面
  <tr>
                    <td>合计</td>
                    <td><%=>  </td>
 </tr>我想在里面调用在存储过程里的输出参数@CaseCount1,请教该怎么做啊?哪位大狭指教一下啊??
                    

解决方案 »

  1.   

    SqlConnection conn = new sqlConnection(conStr);Sqlcommand cmd = new SqlCommand("存储过程名",conn);SqlParameter paramOut = cmd.Parameters.Add("@Return_Value","";
    paramOut.Direction = ParameterDirection.ReturnValue;conn.open();
    cmd.ExecuteNonQuery();
    int i = (int)cmd.Parameters["@Return_Value"].value;
      

  2.   

     数据库中的存储过程构建代码:  Code1use Hotel --数据库名
    2if exists(select * from sysobjects where name='proc_userinfo')--判断是否存在存储过程
    3drop proc proc_userinfo --若存在删除此存储过程
    4go
    5--创建存储过程
    6create proc proc_userinfo
    7@username varchar(50),--输入参数
    8@pwd varchar(50),--输入参数
    9@grade varchar(20),--输入参数
    10@count int output --输出参数output不能少
    11--sql语句
    12as
    13select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade
    14go
    15
    16
    17执行存储过程
    18declare @n int
    19exec proc_userinfo admin,123,管理员,@n output
    20--output不能少
    21print @n
    22go  数据访问层代码  Code1//调用存储过程执行类似于
    2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
    3//接受三个参数分别用来表示用户名、用户密码、用户权限
    4public bool GetUserinfo(string username,string pwd,string grade)
    5    {
    6      //获取连接字符串
    7      private string connstring = ConfigurationManager.ConnectionStrings["connstring"].ToString();
    8      int n = 0;//查询后返回的行数保存存储过程中的输出参数
    9      //创建连接对象 using代码片段好处在于离开作用域后立刻从内存中释放对象
    10      using (SqlConnection con=new SqlConnection(connstring))
    11      {
    12        con.Open();//打开数据库连接
    13        using (SqlCommand cmd=new SqlCommand("proc_userinfo",con))
    14        {
    15          //什么作用不记得了只记得调用存储过程该语句不能少
    16          cmd.CommandType = CommandType.StoredProcedure;
    17          //添加存储过程输入输出参数类型及输入参数值
    18          cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value=username;
    19          cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value=pwd;
    20          cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value=grade;
    21          cmd.Parameters.Add("@count", SqlDbType.Int);
    22          cmd.Parameters["@username"].DbType = DbType.String;
    23          //指定参数类型是输入参数还是输出参数
    24          cmd.Parameters["@username"].Direction = ParameterDirection.Input;
    25          cmd.Parameters["@pwd"].DbType = DbType.String;
    26          //指定参数类型是输入参数还是输出参数
    27          cmd.Parameters["@pwd"].Direction = ParameterDirection.Input;
    28          cmd.Parameters["@grade"].DbType = DbType.String;
    29          //指定参数类型是输入参数还是输出参数
    30          cmd.Parameters["@grade"].Direction = ParameterDirection.Input;
    31          cmd.Parameters["@count"].DbType = DbType.Int32;
    32          //指定参数类型是输入参数还是输出参数
    33          cmd.Parameters["@count"].Direction = ParameterDirection.Output;
    34          //执行存储过程 此处类似于查询语句
    35          cmd.ExecuteScalar();
    36          //接受执行存储过程后的返回值
    37          n = (int)cmd.Parameters["@count"].Value;
    38          //根据返回值判断数据库中是否存在对应用户名密码及用户权限的记录
    39          if (n==1)
    40          {
    41            return true;
    42          }
    43          else
    44          {
    45            return false;
    46          }
    47        }
    48      }
    49    }1//用dataGradeView.DataSource dataGradeView的数据源创建一个DataTable 对象 需要强转成DataTable
    2
    3   DataTable dt=(DataTable )dataGradeView.DataSource; 
    4 //dataGradeView为具体的dataGradeView
    5
    6   dt.Rows.Clean(); //删除表中的行
    7
    8   dataGradeView.DataSource=dt; 
    9//再把dt绑定到dataGradeView上即可
    10
      

  3.   

    //以下是提供输入参数的方法 public void GetCaseCount(DateTime timeStart,DateTime timeEnd) 
        { 
            SqlParameter[] parameters = 
            { 
                new SqlParameter("@BeginTime",SqlDbType.DateTime,8), 
                new SqlParameter("@EndTime",SqlDbType.DateTime,8) 
                new SqlParameter("@CaseCount1",SqlDbType.Int);
            }; 
            parameters[0].Value=timeStart; 
            parameters[1].Value = timeEnd; 
            parameters[2].Direction = ParameterDirection.Output;        DataCommand  excuteNonquery之后取得        num = (int) command.Parameters[3].Value;
             这个在你的函数dbProcessor.RunProcedure 里改。num 就是返回的数量    }     
      

  4.   

    参考
    http://www.cnblogs.com/heimirror/archive/2008/06/03/1212765.html
    http://www.cnblogs.com/pengpeng614/archive/2008/08/29/1279720.html
      

  5.   

    问一下三楼的大狭,我的数据库都是分开写的, private IDbProcessor dbProcessor = new PDSqlServer();我在这个页面只调用就可以了, 我不明白DataCommand  excuteNonquery之后取得 是什么意思啊?能不能再详细点啊?多谢了
      

  6.   


     //以下是提供输入参数的方法 public void GetCaseCount(DateTime timeStart,DateTime timeEnd) 
        { 
            SqlParameter[] parameters = 
            { 
                new SqlParameter("@BeginTime",SqlDbType.DateTime,8), 
                new SqlParameter("@EndTime",SqlDbType.DateTime,8) ,
                 new SqlParameter("@CaseCount1 ",SqlDbType.Int) 
            }; 
            parameters["BeginTime"].Value=timeStart; 
            parameters["EndTime"].Value = timeEnd; 
            parameters["@CaseCount1 "].Direction = System.Data.ParameterDirection.Output;        DataSet ds = this.dbProcessor.RunProcedure("Cup_Work_GetCaseCount", parameters, "GetCaseCountInfo"); 
            DataTable dt = ds.Tables["GetCaseCountInfo"];  
            int I= Parameters["@Message"].Value.ToString();    } 
      

  7.   


     //以下是提供输入参数的方法 public void GetCaseCount(DateTime timeStart,DateTime timeEnd) 
        { 
            SqlParameter[] parameters = 
            { 
                new SqlParameter("@BeginTime",SqlDbType.DateTime,8), 
                new SqlParameter("@EndTime",SqlDbType.DateTime,8) ,
                 new SqlParameter("@CaseCount1 ",SqlDbType.Int) 
            }; 
            parameters["BeginTime"].Value=timeStart; 
            parameters["EndTime"].Value = timeEnd; 
            parameters["@CaseCount1 "].Direction = System.Data.ParameterDirection.Output;        DataSet ds = this.dbProcessor.RunProcedure("Cup_Work_GetCaseCount", parameters, "GetCaseCountInfo"); 
            DataTable dt = ds.Tables["GetCaseCountInfo"];  
            int I= Parameters["@Message"].Value.ToString();    }