以一个银行转账问题做实例
首先在Sql中编写一个存储过程
create table bank(id int primary key identity(1,1),ammonut money);
insert into bank values(10000);
insert into bank values(0001);
select * from bank
drop table bank;
go
create proc usp_abcd--创建存储过程
@outputNumber int,--定义参数
@inputNumber int,
@moneyNumber money,
@out int output---一个output类型的参数
as
begin
begin tran----创建一个事物 用来约束执行语句
begin try
update bank set ammonut=ammonut-@moneyNumber where id=@outputNumber
update bank set ammonut=ammonut+@moneyNumber where id=@inputNumber
set @out=1
commit
end try
begin catch
set @out=0
rollback
end catch
end
在控制台应用程序中
static void Main(string[] args)
{
string a, b, c, d;//声明变量
d = ConfigurationManager.ConnectionStrings["sqlProc"].ConnectionString;//数据库连接
Console.WriteLine("转入账号");
a=Console.ReadLine();
Console.WriteLine("转出账号");
b = Console.ReadLine();
Console.WriteLine("转入金额");
c = Console.ReadLine();
using (SqlConnection con = new SqlConnection(d))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "usp_abcd";//执行存储过程
cmd.CommandType = CommandType.StoredProcedure;//转换commandtext的执行模式
SqlParameter sp = new SqlParameter("@outputNumber",b);
SqlParameter sp2 = new SqlParameter("@inputNumber",a);
SqlParameter sp3 = new SqlParameter("@moneyNumber",c);
SqlParameter sp4 = new SqlParameter("@out",SqlDbType.Bit );//获取存储过程 output类型变量的返回值
sp4.Direction=ParameterDirection.Output;//设置查询过程的执行模式
cmd.Parameters.Add(sp);
cmd.Parameters.Add(sp2);
cmd.Parameters.Add(sp3);
cmd.Parameters.Add(sp4);
cmd.ExecuteNonQuery();
if((bool)sp4.Value==true)//判断
{
Console.WriteLine("转账成功");
Console.ReadKey();
}
else
{
Console.WriteLine("转账失败");
Console.ReadKey();
}
}
}
}
