| UserAccount | ||||
| UserID | UserName | PassWord | RegisterTime | RegisterIP | 
| 12 | 6 | 6 | 2012-12-31 | 6 | 
| 18 | 5 | 5 | 2013-01-01 | 5 | 
| 19 | 1 | 1 | 2013-01-01 | 1 | 
| 20 | 2 | 2 | 2013-01-01 | 2 | 
| 21 | 3 | 3 | 2013-01-01 | 3 | 
| 22 | 4 | 4 | 2013-01-01 | 4 | 
| 23 | 5 | 5 | 2013-01-01 | 5 | 
| 25 | 7 | 7 | 2013-01-01 | 7 | 
| 26 | 8 | 8 | 2013-01-01 | 8 | 
| NULL | NULL | NULL | NULL | NULL | 
针对上面的表,我使用存储过程对它做一些操作:
1. 只返回单一记录集的存储过程 
-------------执行上面的存储过程----------------
exec GetUserAccount
2.没有输入输出的存储过程
create Procedure inUserAccount
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,'2013-01-02',9)
go
-------------执行上面的存储过程----------------
exec inUserAccount
3.有返回值的存储过程 
create Procedure inUserAccountRe
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(10,10,'2013-01-02',10)
return @@rowcount
go
-------------执行上面的存储过程----------------
exec inUserAccountRe
4.有输入参数和输出参数的存储过程
create Procedure GetUserAccountRe
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
go
-------------执行上面的存储过程----------------
exec GetUserAccountRe '7',null
5. 同时具有返回值、输入参数、输出参数的存储过程 
create Procedure GetUserAccountRe1
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
return @@rowcount
go
-------------执行上面的存储过程----------------
exec GetUserAccountRe1 '7',null
6.同时返回参数和记录集的存储过程 
create Procedure GetUserAccountRe2
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
select * from UserAccount
return @@rowcount
go
-------------执行上面的存储过程----------------
exec GetUserAccountRe2 '7',null
7.返回多个记录集的存储过程 
create Procedure GetUserAccountRe3
as
select * from UserAccount
select * from UserAccount where UserID>5
go
-------------执行上面的存储过程----------------
exec GetUserAccountRe3
小结:上面我们创建了各式的存储过程,下面看我们在c#中怎样调用这些存储过程。
c#调用存储过程
 这里调用的存储过程为上面我写的那些各式各样的存储过程。
 
public partial class ProcedureTest : System.Web.UI.Page
    {
        public static  string conn = ConfigurationManager.ConnectionStrings["StuRelationDBConnectionString"].ConnectionString;
        public SqlConnection con = new SqlConnection(conn);
        protected void Page_Load(object sender, EventArgs e)
        {
            runGetUserAccountRe3();
        }
        //只返回单一记录集的存储过程GetUserAccount
        public void runGetUserAccount()
        {
            SqlDataAdapter dp = new SqlDataAdapter(common("GetUserAccount"));
            DataSet ds = new DataSet();
            // 填充dataset 
            dp.Fill(ds);
            rpt.DataSource = ds;
            rpt.DataBind();
}
        //没有输入输出的存储过程inUserAccount
        public void runinUserAccount()
        {            
            con.Open();
            Label1.Text = common("inUserAccount").ExecuteNonQuery().ToString();
            con.Close();
        }
        //有返回值的存储过程inUserAccountRe
        public void runinUserAccountRe()
        {
            // 创建参数 
            SqlCommand cmd = common("inUserAccountRe");
            IDataParameter[] parameters = { 
                 new SqlParameter("rval", SqlDbType.Int,4) 
             };
            // 将参数类型设置为 返回值类型 
            parameters[0].Direction = ParameterDirection.ReturnValue;
            // 添加参数 
            cmd.Parameters.Add(parameters[0]);
            con.Open();
            // 执行存储过程并返回影响的行数 
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            con.Close();
            // 显示影响的行数和返回值 
            Label1.Text += "-" + parameters[0].Value.ToString();
        }
        //有输入参数和输出参数的存储过程
        public void runGetUserAccountRe()
        {
            SqlCommand cmd = common("GetUserAccountRe");
            // 创建参数 
            IDataParameter[] parameters = { 
                 new SqlParameter("@UserName", SqlDbType.NChar,20) , 
                 new SqlParameter("@UserID", SqlDbType.Int) ,
             };
            // 设置参数类型 
            parameters[0].Value = "7";  
            parameters[1].Direction = ParameterDirection.Output;  // 设置为输出参数 
            // 添加参数 
            cmd.Parameters.Add(parameters[0]);
            cmd.Parameters.Add(parameters[1]);
            con.Open();
            // 执行存储过程并返回影响的行数 
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            con.Close();           
            // 显示影响的行数和输出参数 
            Label1.Text += "-" + parameters[1].Value.ToString();
        }
        //同时具有返回值、输入参数、输出参数的存储过程GetUserAccountRe1
        public void runGetUserAccountRe1()
        {
            SqlCommand cmd = common("GetUserAccountRe1");
            // 创建参数 
            IDataParameter[] parameters = { 
                 new SqlParameter("@UserName", SqlDbType.NChar,20) , 
                 new SqlParameter("@UserID", SqlDbType.Int) ,
                 new SqlParameter("rval", SqlDbType.Int,4) 
             };
            // 设置参数类型 
            parameters[0].Value = "7";
            parameters[1].Direction = ParameterDirection.Output;  // 设置为输出参数 
            parameters[2].Direction = ParameterDirection.ReturnValue;  //设置为返回值
            // 添加参数 
            cmd.Parameters.Add(parameters[0]);
            cmd.Parameters.Add(parameters[1]);
            cmd.Parameters.Add(parameters[2]);
            con.Open();
            // 执行存储过程并返回影响的行数 
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            con.Close();
            // 显示影响的行数和输出参数 
            Label1.Text += "-输出参数为:" + parameters[1].Value.ToString();
            Label1.Text += "-返回值为:" + parameters[2].Value.ToString();
}
        //同时返回参数和记录集的存储过程GetUserAccountRe2
        public void runGetUserAccountRe2()
        {
            SqlCommand cmd = common("GetUserAccountRe2");
            // 创建参数 
            IDataParameter[] parameters = { 
                 new SqlParameter("@UserName", SqlDbType.NChar,20) , 
                 new SqlParameter("@UserID", SqlDbType.Int) ,
                 new SqlParameter("rval", SqlDbType.Int,4) 
             };
            // 设置参数类型 
            parameters[0].Value = "7";
            parameters[1].Direction = ParameterDirection.Output;  // 设置为输出参数 
            parameters[2].Direction = ParameterDirection.ReturnValue;  //设置为返回值
            // 添加参数 
            cmd.Parameters.Add(parameters[0]);
            cmd.Parameters.Add(parameters[1]);
            cmd.Parameters.Add(parameters[2]);
            con.Open();
            // 执行存储过程并返回影响的行数 
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            DataSet ds = new DataSet();
            SqlDataAdapter dt = new SqlDataAdapter(cmd);
            dt.Fill(ds);
            rpt.DataSource = ds;
            rpt.DataBind();
            con.Close();
            // 显示影响的行数和输出参数 
            Label1.Text += "-输出参数为:" + parameters[1].Value.ToString();
            Label1.Text += "-返回值为:" + parameters[2].Value.ToString();
}
        //返回多个记录集的存储过程
        public void runGetUserAccountRe3()
        {
            DataSet ds = new DataSet();
            SqlDataAdapter dt = new SqlDataAdapter(common("GetUserAccountRe3"));
            dt.Fill(ds);
            rpt1.DataSource = ds.Tables[0].DefaultView;
            rpt1.DataBind();
            rpt2.DataSource = ds.Tables[1].DefaultView;
            rpt2.DataBind();
        }
        public SqlCommand common(string proName)
        {
            SqlCommand cmd = new SqlCommand();
            // 设置sql连接 
            cmd.Connection = con;            
            // 如果执行语句 
            cmd.CommandText = proName;
            // 指定执行语句为存储过程 
            cmd.CommandType = CommandType.StoredProcedure;
            return cmd;
        }
    }
 
select APP_NAME ( ) as w --当前会话的应用程序
select @@IDENTITY   --返回最后插入的标识值 
select USER_NAME()    --返回用户数据库用户名
SELECT @@CONNECTIONS  --返回自上次SQL启动以来连接或试图连接的次数。 
SELECT GETDATE() --当前时间 
SELECT @@CPU_BUSY/100  --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫秒
USE tempdb SELECT @@DBTS  as w  --为当前数据库返回当前 timestamp 数据类型的值。这一 timestamp 值保证在数据库中是唯一的。 
select @@IDENTITY as w --返回最后插入的标识值 
SELECT @@IDLE  as w  --返回SQL自上次启动后闲置的时间,单位为毫秒 
SELECT @@IO_BUSY AS w   --返回SQL自上次启动后用于执行输入和输出操作的时间,单位为毫秒 
SELECT @@LANGID AS w   --返回当前所使用语言的本地语言标识符(ID)。 
SELECT @@LANGUAGE AS w   --返回当前使用的语言名 
SELECT @@LOCK_TIMEOUT as w  --当前会话的当前锁超时设置,单位为毫秒。 
SELECT @@MAX_CONNECTIONS  as w  --返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值 
EXEC sp_configure  --显示当前服务器的全局配置设置 
SELECT @@MAX_PRECISION as w --返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。 
select @@OPTIONS  as w  --返回当前 SET 选项的信息。 
SELECT @@PACK_RECEIVED as w  --返回SQL自启动后从网络上读取的输入数据包数目。 
SELECT @@PACK_SENT as w  --返回SQ自上次启动后写到网络上的输出数据包数目。 
SELECT @@PACKET_ERRORS as w  --返回自SQL启动后,在SQL连接上发生的网络数据包错误数。 
SELECT @@SERVERNAME as w --返回运行SQL服务器名称。 
SELECT @@SERVICENAME  as w --返回SQL正在其下运行的注册表键名 
SELECT @@TIMETICKS  as w --返回SQL服务器一刻度的微秒数 
SELECT @@TOTAL_ERRORS AS w  --返回 SQL服务器自启动后,所遇到的磁盘读/写错误数。 
SELECT @@TOTAL_READ  as w  --返回 SQL服务器自启动后读取磁盘的次数。 
SELECT @@TOTAL_WRITE as w  --返回SQL服务器自启动后写入磁盘的次数。 
SELECT @@TRANCOUNT  as w  --返回当前连接的活动事务数。 
SELECT @@VERSION as w  --返回SQL服务器安装的日期、版本和处理器类型。