欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# 三步递交模式调用同一个存储过程

程序员文章站 2022-04-09 15:32:35
主要用于批量的sql操作:第一步创建中间表,第二步多次写数据到中间表,第三步 提交执行 创建三步递交的存储过程: 封装方法: 调用方式: ......

主要用于批量的sql操作:第一步创建中间表,第二步多次写数据到中间表,第三步 提交执行

创建三步递交的存储过程:

 

create proc usp_testsbdj
@bz int=0,
@name varchar(100)=''
as

if(@bz=1)
begin
create table ##temp(id varchar(100),name varchar(100))
end
else if(@bz=2)
begin
if exists(select 1 from ##temp )
begin
select 'f'
end

insert into ##temp
( id, name )
values ( newid(), -- id - varchar(10)
@name -- name - varchar(100)
)
end
else
begin
select * from ##temp
end
select 't'

 

 

 

封装方法:

/// <summary>
/// 支持同一个连接执行sql,用于三步递交,迭代返回每次执行结果
/// </summary>
/// <param name="strsqls"></param>
/// <returns></returns>
public ienumerable<datatable> yieldreturndatatable(list<string> strsqls)
{
if (strsqls == null || strsqls.count < 1)
{
yield return null;
yield break;
}
using (var connection = new mysqlconnection(dbconnectionstring))
{
connection.open();
foreach (string strsql in strsqls)
{
var ds = new datatable();
try
{
using (var cmd = new mysqlcommand(strsql, connection))
{
cmd.commandtimeout = dbcommandtimeout;
using (var dataadapter = new mysqldataadapter(cmd))
{
dataadapter.fill(ds);
}
}
}
catch (mysqlexception ex)
{
tools.debug(string.format("执行异常语句:{0} ,执行数据库:{1} ,报错: {2}", strsql, dbconnectionstring, ex.message));
tools.error(ex);
yield break;
}
yield return ds;
}
}
}

 

 

 

调用方式:

list<string> liststring = new list<string>();
liststring.add("exec usp_testsbdj 1");
liststring.add("exec usp_testsbdj 2,'李伟'");
liststring.add("exec usp_testsbdj '2,'王伟伟''");
liststring.add("exec usp_testsbdj 3");

foreach (datatable dt in yieldreturndatatable(liststring))
{
string str = dt.rows[0][0].tostring();
if (str == "f")
{
return;
}
}