Как включить файловый поток в SQL Server 2008 R2 с использованием кода C # - PullRequest
2 голосов
/ 12 июля 2011

У меня есть файл установки, созданный для моего приложения wpf, которое установит .net Framework 4 и SQL Server 2008R2 на клиентском компьютере.

Однако перед запуском сценария sql в моем коде c # мне нужно включить поток файлов в инструментах конфигурации Microsoft SQL Sever 2008 R2 / на моем компьютере.

Мне нужен способ сделать это в коде c #, а не делать это вручную.

Я пробовал следующее:

Включение функции FILESTREAM с использованием Transact SQL (TSQL)

со страницы, http://www.mssqltips.com/tip.asp?tip=1838, но это не сработало.

Спасибо и всего наилучшего!

Ответы [ 2 ]

1 голос
/ 19 марта 2015
  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 .Если имя_экземпляра равно SQLEXPRESS , тогда имя службы будет MSSQL $ SQLEXPRESS .Перезапуск может быть выполнен с помощью системной консоли или другим способом.

    3.1 sc stop "MSSQL $ SQLEXPRESS"

    3.2 Дождитесь его остановки (проверьте состояние службы: sc запрос "MSSQL $ SQLEXPRESS" ) ..

    3.3 sc start "MSSQL $ SQLEXPRESS"

0 голосов
/ 12 июля 2011

Как правило, для любого администрирования SQL Server с помощью кода .net вы должны смотреть на Объекты управления SQL Server .Он может поддерживать включение FILESTREAM на уровне БД, но я не уверен.

Если это поможет, вы, по крайней мере, сможете создать новый включенный FILESTREAM FileGroup через API,На этой странице MSDN есть пример, плюс есть некоторые примеры блогов, если вы google smo filestream .

...