当前位置: 移动技术网 > IT编程>开发语言>c# > c# 三步递交模式调用同一个存储过程

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

2019年08月15日  | 移动技术网IT编程  | 我要评论

主要用于批量的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;
}
}

 

  

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网