首页 > 编程 > C# > 正文

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

2019-10-29 21:37:56
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#中实现一次执行多条带GO的sql语句,以实例形式较为详细的分析了C#执行sql语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

 

 
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Collections; 
  6. using System.Text.RegularExpressions; 
  7. using System.Data.SqlClient;  
  8. namespace ConsoleApplication1 
  9. class Program 
  10. //注: 在cmd.ExecuteNonQuery()是不允许语句中有GO出现的, 有则出错。 
  11. static string connectionString = "server=20111011-2204//SQLSERVER2008;uid=ecuser;pwd=1234;database=Stu;"
  12. static void Main(string[] args) 
  13. string sql =  
  14. @"Alter table Student add DateBak varchar(16)  
  15. go  
  16. Update Student set DateBak = convert(char,getdate(),101) 
  17. go  
  18. Update Student set Memo = DateBak 
  19. go  
  20. Alter table Student drop column DateBak  
  21. go  
  22. "; 
  23. Console.WriteLine("1. 不用事务:"); 
  24. ExecuteSqlWithGo(sql); 
  25. Console.WriteLine("2. 用事务:"); 
  26. ExecuteSqlWithGoUseTran(sql); 
  27. Console.ReadLine(); 
  28. public static void ExecuteSqlWithGo(String sql) 
  29. int effectedRows = 0; 
  30. using (SqlConnection conn = new SqlConnection(connectionString)) 
  31. conn.Open(); 
  32. SqlCommand cmd = new SqlCommand(); 
  33. cmd.Connection = conn; 
  34. try 
  35. //注: 此处以 换行_后面带0到多个空格_再后面是go 来分割字符串 
  36. String[] sqlArr = Regex.Split(sql.Trim(), "/r/n//s*go", RegexOptions.IgnoreCase);  
  37. foreach (string strsql in sqlArr) 
  38. if (strsql.Trim().Length > 1 && strsql.Trim()!="/r/n"
  39. cmd.CommandText = strsql; 
  40. effectedRows = cmd.ExecuteNonQuery(); 
  41. catch (System.Data.SqlClient.SqlException E) 
  42. throw new Exception(E.Message); 
  43. finally 
  44. conn.Close(); 
  45. public static void ExecuteSqlWithGoUseTran(String sql) 
  46. using (SqlConnection conn = new SqlConnection(connectionString)) 
  47. conn.Open(); 
  48. SqlCommand cmd = new SqlCommand(); 
  49. cmd.Connection = conn; 
  50. SqlTransaction tx = conn.BeginTransaction(); 
  51. cmd.Transaction = tx; 
  52. try 
  53. //注: 此处以 换行_后面带0到多个空格_再后面是go 来分割字符串 
  54. String[] sqlArr = Regex.Split(sql.Trim(), "/r/n//s*go", RegexOptions.IgnoreCase);  
  55. foreach (string strsql in sqlArr) 
  56. if (strsql.Trim().Length > 1 && strsql.Trim() != "/r/n"
  57. cmd.CommandText = strsql; 
  58. cmd.ExecuteNonQuery(); 
  59. tx.Commit(); 
  60. catch (System.Data.SqlClient.SqlException E) 
  61. tx.Rollback(); 
  62. throw new Exception(E.Message); 
  63. finally 
  64. conn.Close(); 
  65. }  

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表