我为我的wpf应用程序创建了一个安装文件,它将在客户机上安装.net framework 4和sql server 2008R2。
然而,在我的c#代码中运行sql脚本之前,我需要在我的机器上的Microsoft SQL Sever 2008 R2 /配置工具中启用文件流。
我需要一种在c#代码中执行此操作的方法,而不是手动执行。
我尝试了以下内容:
使用Transact SQL(TSQL)启用FILESTREAM功能
来自页面http://www.mssqltips.com/tip.asp?tip=1838,但它没有用。
谢谢,最诚挚的问候!
答案 0 :(得分:1)
调用此函数。
private void EnableFileStream(string instanceName)
{
//sql 2008 - ComputerManagement10, sql2012 - ComputerManagement11
string SqlWmiPath = @"\\.\root\Microsoft\SqlServer\ComputerManagement10";
string WqlSqlFs = "SELECT * FROM FileStreamSettings WHERE InstanceName='" + instanceName + "'";
ManagementScope scope = new ManagementScope(SqlWmiPath);
int arch = Environment.Is64BitOperatingSystem ? 64 : 32;
scope.Options.Context.Add("__ProviderArchitecture", arch);
scope.Connect();
WqlObjectQuery wql = new WqlObjectQuery(WqlSqlFs);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wql);
ManagementObjectCollection moColl = searcher.Get();
foreach (ManagementObject m in moColl)
{
ManagementBaseObject param = m.GetMethodParameters("EnableFileStream");
//0 - off
//1 - enable transact sql
//2 - enable transact sql and stream acess
//3 - enable transact sql and stream acess and remote stream access
param["AccessLevel"] = 1;
param["ShareName"] = instanceName;
var output = m.InvokeMethod("EnableFileStream", param, null);
if (output != null)
{
uint retValue = (uint)output.GetPropertyValue("ReturnValue");
//analyze return value
}
}
}
重新启动与 instanceName 对应的系统服务。 如果instanceName是 SQLEXPRESS ,那么服务名称将是 的 MSSQL $ SQLEXPRESS 即可。可以通过系统控制台或其他方式重新启动。
3.1 sc stop“MSSQL $ SQLEXPRESS”
3.2等待它停止(检查服务状态: sc查询“MSSQL $ SQLEXPRESS”)..
3.3 sc start“MSSQL $ SQLEXPRESS”
答案 1 :(得分:0)
通常,对于通过.net代码管理SQL Server,您应该查看SQL Server Management Objects。它可能支持在DB级别启用FILESTREAM,但我不确定。
如果有任何帮助,您至少可以通过api创建新的FILESTREAM FileGroup。 MSDN页面上有一个示例,如果你谷歌 smo filestream ,还有一些博客样本。