如何使用C#代码在SQL Server 2008 R2中启用文件流

时间:2011-07-12 07:26:09

标签: .net sql-server-2008 filestream

我为我的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,但它没有用。

谢谢,最诚挚的问候!

2 个答案:

答案 0 :(得分:1)

  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
            }
        }
    }
    
  2. 重新启动与 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 ,还有一些博客样本。