函数传空参 调用存储过程

来源:互联网 发布:在线浏览器代理软件 编辑:程序博客网 时间:2024/04/30 10:38

这个可是折腾了我昨天一下午,我就是喜欢能少写方法就少写,所以就会出现很多的问题。不过还是有很多收获。

算了,还是贴代码吧,看的实在点。

int? CompanyID = Convert.ToInt32(Session["Frame_ID"]);     //这个是aspx.cs文件定义的参数咯,当session[“Frame_ID”]为null时,CompanyID=0.

再看CS类文件的类方法如何传参的:

public SqlDataReader Proc_Team_Query(int? CompanyID, SQLHelper.SQLHelper sqlhelper)
        {
            SqlDataReader dr = null;
            if (CompanyID == 0)
            {
                SqlParameter[] paramList = {
                                            sqlhelper.CreateInParam("@FrameID",SqlDbType.Int,4,DBNull.Value)    //要这样传才可以,变成DBNull.Value才能传进数据库
                 };
                try
                {
                    ///执行存储过程
                    sqlhelper.RunProc("Proc_Team_Query", paramList, out dr);
                }
                catch (Exception ex)
                {
                    ///抛出执行数据库异常
                    SystemError.SystemLog(ex.Message);
                    throw new Exception(ex.Message, ex);
                }
            }
            else
            {
                SqlParameter[] paramList = {
                                            sqlhelper.CreateInParam("@FrameID",SqlDbType.Int,4,CompanyID)
                 };
                try
                {
                    ///执行存储过程
                    sqlhelper.RunProc("Proc_Team_Query", paramList, out dr);
                }
                catch (Exception ex)
                {
                    ///抛出执行数据库异常
                    SystemError.SystemLog(ex.Message);
                    throw new Exception(ex.Message, ex);
                }
            }

            return dr;
        }

再看数据库里的存储过程:

ALTER PROCEDURE [dbo].[Proc_Team_Query]
@FrameID decimal
AS
if(@FrameID is null)   //要写成is null,否则查询不出的
 begin
  select *
  from Base_Framework
  where Parent_ID is null  //这里同样也是,要写成is null
 end

else
 begin
  select *
  from Base_Framework
  where Parent_ID = @FrameID
 end

 

OK了,是不是有些繁琐,可是我喜欢什么情况都能调用,这样就会少些不必要的文件了。

原创粉丝点击