0

SQL Server 2008 R2 Express、.Net Framework 4.0、Visual Studio 2010

我正在尝试从命令提示符应用程序执行 SQL 脚本。我找到了一个示例
代码并尝试实现它。但无法识别以下 using 语句。

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

我是否缺少任何程序集参考?

4

3 回答 3

5

您可能需要 SQL Server 附带的 SDK 中包含的程序集。确保在安装 SQL Server 时安装了 SDK。

(截图取自随机谷歌图片搜索,突出显示的项目是你需要的)
在此处输入图像描述

默认情况下,它们位于类似于C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies您安装的 SQL Server 版本的版本号可能不同的路径。

于 2013-06-10T18:25:22.377 回答
2

以下 c# 代码使用 SMO(SQL Server 管理对象)从 .sql 文件中读取任何 sql 查询并在 SQL Server 上执行。

 #region Using Directives

    using System.Configuration;
    using System.Data.SqlClient;
    using System.IO;
    using Microsoft.SqlServer.Management.Common;
    using Microsoft.SqlServer.Management.Smo;
    using System.Xml.Linq;
    using System;

    #endregion

    public sealed class DatabaseHandler
    {
        #region Properties

        /// <summary>
        /// Returns the Database Connection String
        /// </summary>
        public string ConnectionString
        {
            get
            {
                return ConfigurationManager.AppSettings["DbConnectionString"];
            }
        }

        #endregion

        #region Public Methods

        /// <summary>
        /// Reads the script conent from .sql file and execute on SQl Server
        /// </summary>
        /// <param name="scriptFilePath">.sql Script file path</param>
        /// <returns>Operation status <c>true: Success</c><c>false: Failed</c></returns>
        public bool ExecuteScript(string scriptFilePath)
        {
            try
            {
                bool isCreated = false;

                if (!string.IsNullOrWhiteSpace(scriptFilePath))
                {
                    FileInfo fileInfo = new FileInfo(scriptFilePath);

                    if (null != fileInfo)
                    {
                        //Holds the sql script as string
                        string scriptText = string.Empty;

                        using (StreamReader reader = fileInfo.OpenText())
                        {
                            if (null != reader)
                            {
                                scriptText = reader.ReadToEnd();
                            }
                        }

                        using (SqlConnection connection = new SqlConnection(ConnectionString))
                        {
                            Server sqlServer = new Server(new ServerConnection(connection));

                            if (null != sqlServer && null != sqlServer.ConnectionContext)
                            {
                                sqlServer.ConnectionContext.ExecuteNonQuery(scriptText);
                            }
                        }
                    }
                }

                isCreated = true;
                return isCreated;
            }
            catch (FileNotFoundException)
            {
                throw new FileNotFoundException("Unable to find" + scriptFilePath);
            }
            catch (Exception)
            {
                throw;
            }
        }

        #endregion
    }
于 2013-06-26T15:23:27.840 回答
1

现在是 2017 年,有一种更简单的方法。

添加此 NuGet 包: https ://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects

于 2017-09-17T03:02:42.843 回答