简单的脚本批量发布(带事务)程序
来源:互联网 发布:中国美术馆 知乎 编辑:程序博客网 时间:2024/06/07 14:35
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;namespace ConsoleApplication8{ class Program { static void Main(string[] args) { string connString = @"Data Source=(local)\sqlserver2014;Initial Catalog=tempdb;Integrated Security=True"; //正确SQL string sql_1 =@"IF OBJECT_ID('t') IS NOT NULL DROP TABLE tCREATE TABLE t(id INT IDENTITY(1,1) PRIMARY KEY)GOALTER TABLE t ADD c1 INTgoINSERT INTO t(c1) VALUES(1)"; //有错误的SQL string sql_2 =@"INSERT INTO t(c1) VALUES(2)GOif object_id('proc_test') is not null drop proc proc_testgoCREATE PROC Proc_TESTASBegin set nocount on select 1endgo123 -- 注:此处有误"; string errMsg = string.Empty; bool r1 = ExecuteNonQueryWithConnAndGO(connString, sql_1, ref errMsg); Console.WriteLine("SQL1 结果:{0}, 错误信息:{1}", r1 ? "成功":"失败", string.IsNullOrEmpty(errMsg)?"无":errMsg); errMsg = string.Empty; bool r2 = ExecuteNonQueryWithConnAndGO(connString, sql_2, ref errMsg); Console.WriteLine("SQL2 结果:{0}, 错误信息:{1}", r2 ? "成功" : "失败", string.IsNullOrEmpty(errMsg) ? "无" : errMsg); //注:第2个SQL有问题,所以第2个SQL全部回滚了,只有第一个SQL的记录 Print(connString, "select * from t"); Console.Read(); } #region [ 执行带Go语句 ] /// <summary> /// 执行带"GO"的SQL,返回最后一条SQL的受影响行数 /// </summary> /// <param name="connString">连接串</param> /// <param name="sql">sql语句</param> /// <returns>是否成功</returns> public static bool ExecuteNonQueryWithConnAndGO(string connString, string sql, ref string errMsg) { bool result = true; string[] arr = System.Text.RegularExpressions.Regex.Split(sql, @"\bGO\b", System.Text.RegularExpressions.RegexOptions.IgnoreCase); using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < arr.Length; n++) { string strsql = arr[n]; if (strsql.Trim().Length > 1 && strsql.Trim().Replace(";", "") != "") { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.SqlClient.SqlException ex) { tx.Rollback(); result = false; errMsg = ex.Message; } } return result; } #endregion public static void Print(string connString, string sql) { Console.WriteLine("\r\n------- 输出信息: {0} --------", sql); DataTable dt = new DataTable(); using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dt); } foreach (DataRow dr in dt.Rows) { foreach (DataColumn dc in dt.Columns) { Console.Write("{0}: {1}\t",dc.ColumnName,dr[dc.ColumnName].ToString()); } Console.WriteLine(); } } }}
阅读全文
0 0
- 简单的脚本批量发布(带事务)程序
- jedis API接口批量处理包装(事务,管道,分布式锁,lua脚本,发布订阅)
- 简单的发布脚本
- 发布带GigEVision的程序
- bat批量脚本的简单介绍
- shell的简单批量curl接口脚本
- 批量创建win帐号的脚本程序.
- Delphi 发布带F1book的程序
- qt动态发布带phonon的程序
- 简单的Linux脚本程序
- jar 程序发布脚本
- 一个简单的php批量上传程序
- 一个简单的php批量上传程序
- 脚本排错(访问论坛发布带附件帖子)
- 仿ACDSee批量重命名,实现简单的带模板重命名
- 简单的计算器小程序(不带括号)
- AndroidStudio的简单计算器(带优先级)开发小程序~
- 批量修改帝国CMS发布时间,最简单的方法!
- 【apache】配置
- Fortify SCA的一些浅显使用
- Linux信号量常用操作表
- JWT认证 鉴权
- CardView介绍
- 简单的脚本批量发布(带事务)程序
- Linux下网络摄像头
- 自定义View实现词组 不断行显示 并且高亮
- 小程序实现第三方登录,后台采用的是laravel框架
- 计算机各种编码
- java电子商务系统源码B2B2C
- 拉里·埃里森亲自支招,数据库自动化之后,DBA何去何从???
- python数组索引
- 使用js遇到变量的名称为数字怎么办?