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; } }
下一篇: Linux服务器相关信息查询