在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
需要在C#代码中执行一个SQL文件的内容。遇到了两个问题: 1. 因为SQL文件中有“GO”语句,执行时报错“Incorrect syntax near 'GO'.”。 2. 如果将SQL文件中有“GO”语句全部去掉,则可能出现SQL运行错误。原因是去掉“GO”后,等于整个文件的内容一次执行,但是SQL文件有可能后面的内容需要在前面某些语句已经执行的基础上才能执行的。
解决的办法是:用一个StringBuilder,然后一行一行的读SQL文件,如果该行的内容不是“GO”,就向StringBuilder后Append。如果是“GO”,就执行StringBuilder的内的SQL语句,然后清空StringBuilder。这样就能达到与直接执行带“GO”语句的SQL文件一样的效果。
代码如下: private static void ExecuteSQLFile(String sqlFileName) { SqlConnection connecction = null; try { connecction = new SqlConnection(@"uid=XXXX; pwd=XXXX; server=XXXX; database=XXXX; connection timeout=30"); SqlCommand command = connecction.CreateCommand(); connecction.Open();
FileStream stream = new FileStream(sqlFileName, FileMode.Open); StreamReader reader = new StreamReader(stream);
StringBuilder builder = new StringBuilder(); String strLine = ""; while ((strLine = reader.ReadLine()) != null) { if (strLine.Trim().ToUpper() != @"GO") { builder.AppendLine(strLine); } else { command.CommandText = builder.ToString(); command.ExecuteNonQuery(); builder.Remove(0, builder.Length); } }
} catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (connecction != null && connecction.State != ConnectionState.Closed) { connecction.Close(); } } }
|
请发表评论