欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-09 19:13:22
本文实例讲述了c#中实现一次执行多条带go的sql语句。分享给大家供大家参考。具体如下: using system; using system.collecti...

本文实例讲述了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#程序设计有所帮助。