C#中实现一次执行多条带GO的sql语句实例

本文实例讲述了C#中实现一次执行多条带GO的sql语句。分享给大家供大家参考。具体如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
 class Program
 {
  //注: 在cmd.ExecuteNonQuery()是不允许语句中有GO出现的, 有则出错。
  static string connectionString = "server=20111011-2204\\SQLSERVER2008;uid=ecuser;pwd=1234;database=Stu;";
  static void Main(string[] args)
  {
   string sql =
@"Alter table Student add DateBak varchar(16)
  go
 Update Student set DateBak = convert(char,getdate(),101)
 go
 Update Student set Memo = DateBak
go
 Alter table Student drop column DateBak
go
";
   Console.WriteLine("1. 不用事务:");
   ExecuteSqlWithGo(sql);
   Console.WriteLine("2. 用事务:");
   ExecuteSqlWithGoUseTran(sql);
   Console.ReadLine();
  }
  public static void ExecuteSqlWithGo(String sql)
  {
   int effectedRows = 0;
   using (SqlConnection conn = new SqlConnection(connectionString))
   {
    conn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    try
    {
     //注: 此处以 换行_后面带0到多个空格_再后面是go 来分割字符串
     String[] sqlArr = Regex.Split(sql.Trim(), "\r\n\\s*go", RegexOptions.IgnoreCase);
     foreach (string strsql in sqlArr)
     {
      if (strsql.Trim().Length > 1 && strsql.Trim()!="\r\n")
      {
       cmd.CommandText = strsql;
       effectedRows = cmd.ExecuteNonQuery();
      }
     }
    }
    catch (System.Data.SqlClient.SqlException E)
    {
     throw new Exception(E.Message);
    }
    finally
    {
     conn.Close();
    }
   }
  }
  public static void ExecuteSqlWithGoUseTran(String sql)
  {
   using (SqlConnection conn = new SqlConnection(connectionString))
   {
    conn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    SqlTransaction tx = conn.BeginTransaction();
    cmd.Transaction = tx;
    try
    {
     //注: 此处以 换行_后面带0到多个空格_再后面是go 来分割字符串
     String[] sqlArr = Regex.Split(sql.Trim(), "\r\n\\s*go", RegexOptions.IgnoreCase);
     foreach (string strsql in sqlArr)
     {
      if (strsql.Trim().Length > 1 && strsql.Trim() != "\r\n")
      {
       cmd.CommandText = strsql;
       cmd.ExecuteNonQuery();
      }
     }
     tx.Commit();
    }
    catch (System.Data.SqlClient.SqlException E)
    {
     tx.Rollback();
     throw new Exception(E.Message);
    }
    finally
    {
     conn.Close();
    }
   }
  }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#中验证sql语句是否正确(不执行语句)

    SET PARSEONLY检查每个 Transact-SQL 语句的语法并返回任何错误消息,但不编译和执行语句.SET PARSEONLY { ON | OFF }当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句.当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句.SET PARSEONLY 的设置是在分析时设置,而不是在执行或运行时设置.在存储过程或触发器中不要使用 PARSEONLY.如果 OFFSETS 选项为 ON 而且没有

  • C#拼接SQL语句 用ROW_NUMBER实现的高效分页排序

    如果项目中要用到数据库,铁定要用到分页排序.之前在做数据库查询优化的时候,通宵写了以下代码,来拼接分页排序的SQL语句 复制代码 代码如下: /// <summary> /// 单表(视图)获取分页SQL语句 /// </summary> /// <param name="tableName">表名或视图名</param> /// <param name="key">唯一键</param> //

  • C#使用带like的sql语句时防sql注入的方法

    本文实例叙述了在拼接sql语句的时候,如果遇到Like的情况该怎么办. 一般采用带like的SQL语句进行简单的拼接字符串时,需要开率遇到sql注入的情况.这确实是个需要注意的问题. 这里结合一些查阅的资料做了初步的整理. 如这样一个sql语句: select * from game where gamename like '%张三%' 用c#表示的话: string keywords = "张三"; StringBuilder strSql=new StringBuilder();

  • C#调用SQL语句时乘号的用法

    一般来说,在ADO中,我们需要在SQL语句中使用乘法运算,可是添加'*'以后执行程序总是会出错,这是因为'*'与sql中的'*'关键字重合了,因此编译就会出错. 解决办法为:将乘法运算放到sql语句外面,将结果放入一个变量中,然后在sql语句中引用即可. 如下示例所示: int count = (this.AspNetPager1.CurrentPageIndex-1)*this.AspNetPager1.PageSize; string sql = " select top "+co

  • c#实现用SQL池,多线程定时批量执行SQL语句的方法

    在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题,我们怎么办呢?好,下面我就为大家介绍一种方法:构建SQL池,分离业务逻辑层和数据访问层,让业务逻辑层从低效的数据库操作解脱,以提高系统整体性能. (一)SQL池 SQL池是SQL容器,用于存放业务逻辑层抛过来的SQL语句.SQL池主要提供以下几种方法: 1)internal string Pop()

  • C#中实现一次执行多条带GO的sql语句实例

    本文实例讲述了C#中实现一次执行多条带GO的sql语句.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Text.RegularExpressions; using System.Data.SqlClient; namespace ConsoleApplicati

  • C# 启用事务提交多条带参数的SQL语句实例代码

    具体代码如下所示: /// <summary> /// 启用事务提交多条带参数的SQL语句 /// </summary> /// <param name="mainSql">主表SQL</param> /// <param name="mainParam">主表对应的参数</param> /// <param name="detailSql">明细表SQL语句&l

  • Oracle中简单查询、限定查询、数据排序SQL语句范例和详细注解

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言. Oracle数据库之所以发展的很好,主要也是因为Oracle是全世界最早采用SQL语句的数据库产品. SQL功能强大,概括起来,它可以分成以下几组: 复制代码 代码如下: DML(Data Manipulation Language) 数据操作语言,用于

  • asp执行带参数的sql语句实例

    asp执行带参数的sql语句,需要向sql语句添加参数,可以有效屏蔽SQL注入,源代码如下: 复制代码 代码如下: var conn = Server.CreateObject("ADODB.Connection"); conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Test.mdb"); conn.Open();

  • 在SQL Server中查询资料库的TABLE数量与名称的sql语句

    在SQL Server中 每一个database裡都有一个系统所产生的table sysobjects这一个table中记录了database中所有的table名称 我们可以用下面的SQL语法作查询的动作 复制代码 代码如下: Select Name,id from sysobjects where xtype = 'U' 其中xtype='U'代表使用的table,若是使用xtype='S' 则代表系统预设的table 在系统table中还有一个名叫syscolumns的table 他记录了栏

  • SQLServer中字符串左对齐或右对齐显示的sql语句

    知识点: 函数 replicate 以下代码是实现如下功能: 复制代码 代码如下: declare @sql varchar(200), --需填充的字符串 @char varchar(4), --填充使用的字符 @len int --填充后的长度 select @sql='abc' select @char=' ' select @len=10 select (right(replicate(@char,@len)+@sql,@len)) 右对齐 ,@sql+replicate(@char,@

  • sqlserver中重复数据值只取一条的sql语句

    复制代码 代码如下: --建立数据表createtable TestData ( ID int identity(1,1) primary key, Data int, ColA varchar(20), ColB varchar(20) ) go --插入测试数据 declare @counts int declare @i int set @counts = 10000 set @i = 1 while @i<=@counts begin insert TestData (Data,ColA

  • 详解一条sql语句在mysql中是如何执行的

    概览 最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 下面是mysql的一个简要架构图: mysql主要分为Server层和存储引擎层 Server层:主要包括连接器.查询缓存.分析器.优化器.执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图,函数等,还有一个通用的日志模块 bing

  • 一条SQL语句在MySQL中是如何执行的

    目录 一.mysql架构分析 1.1 连接器 1.2 查询缓存 1.3 分析器 1.4 优化器 1.5 执行器 二.语句分析 2.1 查询语句 2.2 更新语句 三.总结 一.mysql架构分析 下面是mysql的一个简要架构图: mysql主要分为Server层和存储引擎层 Server层:主要包括连接器.查询缓存.分析器.优化器.执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图,函数等,还有一个通用的日志模块 binglog日志模块. 存储引擎: 主要负责数据的存储和

  • 在ASP.NET中用存储过程执行SQL语句

    存储过程执行效率比单独的SQL语句效率高. 样编写存储过程?存储过程在SQL Server 2005对应数据库的可编程性目录下. 比如,创建一个存储过程 复制代码 代码如下: create procedure procNewsSelectNewNews as begin select top 10 n.id,n.title,n.createTime,c.name from news n inner join category c on n.caId=c.id order by n.createT

随机推荐