这个可是折腾了我昨天一下午,我就是喜欢能少写方法就少写,所以就会出现很多的问题。不过还是有很多收获。
算了,还是贴代码吧,看的实在点。
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了,是不是有些繁琐,可是我喜欢什么情况都能调用,这样就会少些不必要的文件了。