首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 使用 SMO 執行 SQL 指令碼完整教學

     編輯:關於C#

前言

在 C# 專案中若需以程式碼方式執行 SQL 指令碼(如建立資料庫、執行 DDL/DML),微軟提供的 SQL Server Management Objects (SMO) 是功能最完整、穩定度最高的選擇。本文將從 Visual Studio 專案建立、參考組件加入,到實際程式碼撰寫,完整示範如何使用 SMO 執行 SQL 指令碼。

建立 SMO 專案並加入參考

  1. 開啟 Visual Studio 2008 或更新版本,選擇 檔案 > 新增專案。
  2. 專案類型選 Visual C# > Windows,範本選 主控台應用程式(或 Windows Forms 應用程式)。
  3. 在方案總管中右鍵點擊專案,選擇 加入參考。
  4. 切換到 瀏覽 索引標籤,前往 SMO 組件預設安裝路徑:C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\(版本號會隨 SQL Server 版本不同而變動)。
  5. 按住 Ctrl 鍵多選下列四個核心組件(為 SMO 應用程式最低需求):
    • Microsoft.SqlServer.ConnectionInfo.dll
    • Microsoft.SqlServer.Smo.dll
    • Microsoft.SqlServer.Management.Sdk.Sfc.dll
    • Microsoft.SqlServer.SqlEnum.dll
  6. 若專案涉及 Service Broker 等特定功能,請額外加入 Microsoft.SqlServer.ServiceBrokerEnum.dll。
  7. 點選 開啟 完成參考加入。

撰寫程式碼

在程式碼檔案頂端(命名空間宣告之前)加入必要的 using 指令:

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

SMO 還有許多子命名空間(如 Microsoft.SqlServer.Management.Smo.Agent),視需求再行加入。

執行 SQL 指令碼範例

public void ExecuteSqlScript(string sqlScript, string connectionString)
{
    using (var conn = new System.Data.SqlClient.SqlConnection(connectionString))
    {
        var serverConnection = new ServerConnection(conn);
        var server = new Server(serverConnection);
        // 執行不傳回結果集的 SQL 批次
        server.ConnectionContext.ExecuteNonQuery(sqlScript);
    }
}

說明:

  • ServerConnection 封裝了 ADO.NET 連線,提供 SMO 專用的連線管理。
  • Server 物件代表 SQL Server 執行個體,透過其 ConnectionContext 執行指令碼。
  • ExecuteNonQuery 適合執行 CREATE DATABASE、ALTER TABLE、INSERT 等不需傳回資料的指令;若需查詢結果,請改用 ExecuteWithResults。

常見問題與注意事項

  • 版本相容性: 專案目標 .NET Framework 版本需與 SMO 組件版本相容(例如 SQL Server 2012 SMO 需 .NET 4.0 以上)。
  • 權限: 連線帳戶必須具備執行該指令碼所需的資料庫權限(如 sysadmin 或 dbcreator)。
  • 大型指令碼: 超大指令碼建議拆分批次執行,避免逾時或記憶體壓力。

參考資源

原文連結:https://www.bianceng.cn/Programming/csharp/201410/45754.htm

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved