如何使用c#执行.sql脚本文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (77)

使用c#,我想运行一个.sql文件。SQL文件包含多个SQL语句,其中一些语句被分成多行。我试着读取该文件,并尝试使用ODP.NET执行该文件。但是,我认为ExecutenonQuery并不真正是为了实现这个目的而设计的。

因此,我尝试通过生成进程使用sqlplus...但是,除非我生成的进程被UseShellExecute设置为真正的sqlplus,否则就不会挂起,永远不会退出。下面是不起作用的代码。

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus";
p.StartInfo.Arguments = string.Format("xx/xx@{0} @{1}", in_database, s);
p.StartInfo.CreateNoWindow = true;

bool started = p.Start();
p.WaitForExit();

除非我把UseShellExecute设定为真。UseShellExecute的一个副作用是无法捕获重定向输出。

提问于
用户回答回答于
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Data.SqlClient;

public partial class ExcuteScript : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    string sqlConnectionString = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ccwebgrity;Data Source=SURAJIT\SQLEXPRESS";

    string script = File.ReadAllText(@"E:\Project Docs\MX462-PD\MX756_ModMappings1.sql");

    SqlConnection conn = new SqlConnection(sqlConnectionString);

    Server server = new Server(new ServerConnection(conn));

    server.ConnectionContext.ExecuteNonQuery(script);
    }
}
用户回答回答于

我用Microsoft.SqlServer.Management,代码如下:

  string script = File.ReadAllText(@"E:\someSqlScript.sql");

  // split script on GO command
  IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", 
                           RegexOptions.Multiline | RegexOptions.IgnoreCase);

  Connection.Open();
  foreach (string commandString in commandStrings)
  {
    if (commandString.Trim() != "")
    {
       using(var command = new SqlCommand(commandString, Connection))
       {
          command.ExecuteNonQuery();
       }
    }
  }     
  Connection.Close();

扫码关注云+社区

领取腾讯云代金券