主要用於批量的sql操作:第一步創建中間表,第二步多次寫數據到中間表,第三步 提交執行 創建三步遞交的存儲過程: CREATE PROC usp_testsbdj@bz int=0,@name VARCHAR(100)=''AS IF(@bz=1)BEGIN CREATE TABLE ##temp( ...
主要用於批量的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; } }