簡體   English   中英

在沒有SMO的情況下使用GO語句執行SQL腳本

[英]Executing SQL scripts with GO statements without SMO

我遇到的一件事是將應用程序部署到未安裝SMO的計算機上。 我想執行具有GO語句的腳本,但也希望避免在目標計算機上安裝SMO軟件包或解析SQL腳本文件的需要(因為我不知道sql腳本是否將包含函數或SP)。

我嘗試將SMO relevenat dll手動復制到可執行文件的bin文件夾中,但始終需要運行該應用程序的其他一些dll。

有什么幫助嗎?

除了SMO, sqlcmd實用程序還可以理解GO語句。 您將需要使用System.Diagnostics.Process以便以腳本作為參數對其進行調出。

我絕不是說這是這樣做方法,但這是有效的選擇。 如果該實用程序在目標計算機上不存在,您仍然會遇到與以前相同的問題。

您也許還可以通過安裝程序包部署SMO,而無需在目標計算機上“安裝”它:

在安裝和部署中嵌入SMO dll

我發現以下解決方案已經過測試

using (SqlConnection cn = new SqlConnection(connectionString))
  {
    try
    {
      cn.Open();
      FileInfo file = new FileInfo(fileName);
      string script = file.OpenText().ReadToEnd();
      string[] splitChar = { "\r\nGO\r\n" };
      var sqlLines = script.Split(splitChar, StringSplitOptions.RemoveEmptyEntries);
      int res = 0;
      SqlCommand cmd = null;
      foreach (var query in sqlLines)
      {
          cmd = new SqlCommand(query, cn)
          {
              CommandTimeout = 5400
          };
          res = cmd.ExecuteNonQuery();
      }
      cn.Close();
    }
    catch (Exception ex)
    {
      msg = ex.Message;
    }
    finally
    {
      cn.Close();
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM