SQL Server 2008 R2 Express、.Net Framework 4.0、Visual Studio 2010
我正在尝试从命令提示符应用程序执行 SQL 脚本。我找到了一个示例
代码并尝试实现它。但无法识别以下 using 语句。
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
我是否缺少任何程序集参考?
SQL Server 2008 R2 Express、.Net Framework 4.0、Visual Studio 2010
我正在尝试从命令提示符应用程序执行 SQL 脚本。我找到了一个示例
代码并尝试实现它。但无法识别以下 using 语句。
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
我是否缺少任何程序集参考?
您可能需要 SQL Server 附带的 SDK 中包含的程序集。确保在安装 SQL Server 时安装了 SDK。
(截图取自随机谷歌图片搜索,突出显示的项目是你需要的)
默认情况下,它们位于类似于C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
您安装的 SQL Server 版本的版本号可能不同的路径。
以下 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
}
现在是 2017 年,有一种更简单的方法。
添加此 NuGet 包: https ://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects