说明:
1、我要执行的全部SQL脚本用SSMS单个单个执行都没问题,这是项目中用的脚本(保证脚本文件不会有问题)
2、运行工具时第一个脚本文件能能够执行成功,但在执行第2个脚本文件时会报错
3、我通过调试,报错代是在“server.ConnectionContext.ExecuteNonQuery(script);”这一行
4、我的目的就是执行多个SQL脚本文件
请大家帮我看一下我是那个地方的代码写的有问题
代码如下:
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System.Configuration;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace TPRIWEBSQL
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//6、获取全部要执行的SQL脚本文件全路径并依次执行SQL脚本
#region
string Filepath = @"D:\SQLJB";//存放SQL脚本的目录
List<string> FileList = new List<string>();//存放SQL脚本文件的绝对路径
string RelativePath = @"D:\SQLJB";
GetFile(Filepath, FileList, RelativePath);
//循环执行每1个SQL脚本
for (int i = 0; i < FileList.Count; i++)
{
ExecutionScript(FileList[i]);
MessageBox.Show(FileList[i]);
}
#endregion
}
//执行1个SQL脚本文件
#region
private void ExecutionScript(string path)
{
string connectonstring = "data source=.\\TPRI;initial catalog=mydb9;user id=GeekCat9;password=portal";
//string connectonstring = ConfigurationManager.AppSettings["connectionString"].ToString();
if (File.Exists(path))
{
FileInfo file = new FileInfo(path);
string script = file.OpenText().ReadToEnd();
try
{
//执行脚本
SqlConnection conn = new SqlConnection(connectonstring);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
conn.Close();
}
catch (Exception es)
{
MessageBox.Show(es.Message);
}
}
else
{
MessageBox.Show("脚本不存在!");
//return;
}
MessageBox.Show("9");
}
#endregion
/////获取全部要执行的SQL脚本文件全路径
#region
/// <summary>
/// 获取路径下所有文件以及子文件夹中文件
/// </summary>
/// <param name="path">全路径根目录</param>
/// <param name="FileList">存放所有文件的全路径</param>
/// <param name="RelativePath"></param>
/// <returns></returns>
public static List<string> GetFile(string path, List<string> FileList, string RelativePath)
{
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] fil = dir.GetFiles();
DirectoryInfo[] dii = dir.GetDirectories();
foreach (FileInfo f in fil)
{
FileList.Add(f.FullName);//添加文件路径到列表中
}
//获取子文件夹内的文件列表,递归遍历
foreach (DirectoryInfo d in dii)
{
GetFile(d.FullName, FileList, RelativePath);
}
return FileList;
}
#endregion
}
}