SQL存储过程实例
--1.存储过程复用代码案例--如果english不及格的人超过半数
--则给每个人增加2分,循环加,直到不及格的人数少于一半.
--usp_promoteGrade有一个参数,及格分数线@passline.
use MySchool
select * from Score
update Score set english=50 where english between 60 and 90
create proc usp_promoteGrade
@passline int
as
begin
declare @count1 int=(select COUNT(*) from Score)
declare @loster int=(select COUNT(*) from Score where english<@passline)
declare @harfcount int =floor(@count1/2)
while @harfcount<@loster
begin
update Score set english+=2 where english<@passline
set @loster=(select COUNT(*) from Score where english<@passline)
end
end
exec usp_promoteGrade 60
--2.ADO中使用存储过程
--2.1-1写usp_Login存储过程,参数有三个,其中第三个参数为output
--用来返加登陆是否成功,成功1,失败0(@uname varchar(50),
--@password varchar(50),@result bit output)
create table T_user
(
FuseName nvarchar(50),
Fpassword varchar(50)
)
insert into T_user values('admin','888888')
select * from T_user
create proc usp_Login
@useName varchar(50),@password varchar(50),@result bit output
as
begin
declare @count int
set @count=(select COUNT(*) from T_user where FuseName=@useName and Fpassword=@password)
if @count>0
begin
set @result=1
end
else
begin
set @result=0
end
end
declare @r bit
exec usp_Login 'admin','888888',@r output
print @r
--2.1-2在login.aspx中使用设计登陆界面,使用以上存储过程.
protected void btn_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
string conStr = ConfigurationManager.ConnectionStrings["sqlservercon"].ConnectionString;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_Login";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName", usename);
SqlParameter prm2 = new SqlParameter("@password", pwd);
SqlParameter prm3 = new SqlParameter("@result", System.Data.SqlDbType.Bit);
prm3.Direction = ParameterDirection.Output;
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
cmd.Parameters.Add(prm3);
int r = cmd.ExecuteNonQuery();
Label1.Text =r.ToString();
bool b = Convert.ToBoolean(prm3.Value);
if (b==true)
{
Label2.Text = "登录成功";
}
else
{
Label2.Text = "登录失败";
}
}
}
}
--2.2-1写usp_chkLogin只有两个参数没有output参数.
use MySchool
select * from T_user
create proc usp_chkLogin
@useName1 varchar(50),
@password1 varchar(50)
as
begin
select COUNT(*) from T_user where FuseName=@useName1 and Fpassword=@password1
end
exec usp_chkLogin 'admin','888888'
--2.1-2写login.aspx中使用设计登陆界面,使用以上存储过程.
protected void btn_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
string conStr = ConfigurationManager.ConnectionStrings["sqlservercon"].ConnectionString;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_chkLogin";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName1", usename);
SqlParameter prm2 = new SqlParameter("@password1", pwd);
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
object obj = cmd.ExecuteScalar();
int b = Convert.ToInt32(obj);
if (b>0)
{
Label2.Text = "登录成功";
}
else
{
Label2.Text = "登录失败";
}
}
}
}
--3.写插入存储过程,并在注册页面中使用.
create proc usp_T_user_Insert
@useName2 varchar(50),
@password2 varchar(50)
as
begin
insert into T_user values(@useName2,@password2)
end
exec usp_T_user_Insert 'shang','111111'
select * from T_user
--4.写删除存储过程,并在注册页面中使用.
create proc usp_T_user_Delete
@useName3 varchar(50),
@password3 varchar(50)
as
begin
delete from T_user where FuseName=@useName3 and Fpassword=@password3
end
--5.写查询存储过程,在注册页面中使用.(选做可以用winfrom实现
--dataGradView)
create proc usp_T_user_Select
@useName4 varchar(50),
@password4 varchar(50)
as
begin
select * from T_user where FuseName=@useName4 and Fpassword=@password4
end
private void button1_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
DataSet dataset = new DataSet();//在内存中开辟空间给 dataset
string ConnStr = "Data Source=EJNSWJOZ0JSDS7J;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=111111";
using (SqlConnection conn = new SqlConnection(ConnStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_T_user_Select";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName3", usename);
SqlParameter prm2 = new SqlParameter("@password3", pwd);
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
SqlDataAdapter adapeter = new SqlDataAdapter(cmd);//把数据库服务器中的查询结果给转接器 adapter
adapeter.Fill(dataset);//adapter把查询结果交给dataset
dataGridView1.DataSource=adapeter;
}
}
}
--则给每个人增加2分,循环加,直到不及格的人数少于一半.
--usp_promoteGrade有一个参数,及格分数线@passline.
use MySchool
select * from Score
update Score set english=50 where english between 60 and 90
create proc usp_promoteGrade
@passline int
as
begin
declare @count1 int=(select COUNT(*) from Score)
declare @loster int=(select COUNT(*) from Score where english<@passline)
declare @harfcount int =floor(@count1/2)
while @harfcount<@loster
begin
update Score set english+=2 where english<@passline
set @loster=(select COUNT(*) from Score where english<@passline)
end
end
exec usp_promoteGrade 60
--2.ADO中使用存储过程
--2.1-1写usp_Login存储过程,参数有三个,其中第三个参数为output
--用来返加登陆是否成功,成功1,失败0(@uname varchar(50),
--@password varchar(50),@result bit output)
create table T_user
(
FuseName nvarchar(50),
Fpassword varchar(50)
)
insert into T_user values('admin','888888')
select * from T_user
create proc usp_Login
@useName varchar(50),@password varchar(50),@result bit output
as
begin
declare @count int
set @count=(select COUNT(*) from T_user where FuseName=@useName and Fpassword=@password)
if @count>0
begin
set @result=1
end
else
begin
set @result=0
end
end
declare @r bit
exec usp_Login 'admin','888888',@r output
print @r
--2.1-2在login.aspx中使用设计登陆界面,使用以上存储过程.
protected void btn_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
string conStr = ConfigurationManager.ConnectionStrings["sqlservercon"].ConnectionString;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_Login";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName", usename);
SqlParameter prm2 = new SqlParameter("@password", pwd);
SqlParameter prm3 = new SqlParameter("@result", System.Data.SqlDbType.Bit);
prm3.Direction = ParameterDirection.Output;
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
cmd.Parameters.Add(prm3);
int r = cmd.ExecuteNonQuery();
Label1.Text =r.ToString();
bool b = Convert.ToBoolean(prm3.Value);
if (b==true)
{
Label2.Text = "登录成功";
}
else
{
Label2.Text = "登录失败";
}
}
}
}
--2.2-1写usp_chkLogin只有两个参数没有output参数.
use MySchool
select * from T_user
create proc usp_chkLogin
@useName1 varchar(50),
@password1 varchar(50)
as
begin
select COUNT(*) from T_user where FuseName=@useName1 and Fpassword=@password1
end
exec usp_chkLogin 'admin','888888'
--2.1-2写login.aspx中使用设计登陆界面,使用以上存储过程.
protected void btn_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
string conStr = ConfigurationManager.ConnectionStrings["sqlservercon"].ConnectionString;
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_chkLogin";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName1", usename);
SqlParameter prm2 = new SqlParameter("@password1", pwd);
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
object obj = cmd.ExecuteScalar();
int b = Convert.ToInt32(obj);
if (b>0)
{
Label2.Text = "登录成功";
}
else
{
Label2.Text = "登录失败";
}
}
}
}
--3.写插入存储过程,并在注册页面中使用.
create proc usp_T_user_Insert
@useName2 varchar(50),
@password2 varchar(50)
as
begin
insert into T_user values(@useName2,@password2)
end
exec usp_T_user_Insert 'shang','111111'
select * from T_user
--4.写删除存储过程,并在注册页面中使用.
create proc usp_T_user_Delete
@useName3 varchar(50),
@password3 varchar(50)
as
begin
delete from T_user where FuseName=@useName3 and Fpassword=@password3
end
--5.写查询存储过程,在注册页面中使用.(选做可以用winfrom实现
--dataGradView)
create proc usp_T_user_Select
@useName4 varchar(50),
@password4 varchar(50)
as
begin
select * from T_user where FuseName=@useName4 and Fpassword=@password4
end
private void button1_Click(object sender, EventArgs e)
{
string usename = useName.Text.Trim();
string pwd = password.Text.Trim();
DataSet dataset = new DataSet();//在内存中开辟空间给 dataset
string ConnStr = "Data Source=EJNSWJOZ0JSDS7J;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=111111";
using (SqlConnection conn = new SqlConnection(ConnStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
string use_name = "usp_T_user_Select";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = use_name;
SqlParameter prm1 = new SqlParameter("@useName3", usename);
SqlParameter prm2 = new SqlParameter("@password3", pwd);
cmd.Parameters.Add(prm1);
cmd.Parameters.Add(prm2);
SqlDataAdapter adapeter = new SqlDataAdapter(cmd);//把数据库服务器中的查询结果给转接器 adapter
adapeter.Fill(dataset);//adapter把查询结果交给dataset
dataGridView1.DataSource=adapeter;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构