2013-08-08 1 views
1

Я написал несколько C# для выполнения указанных SQL-скриптов, отдельных команд в разделителе партий GO и выполнения каждой команды. Это значит, что объекты SQL могут быть установлены в начале приложения. Однако у меня возникла проблема с установкой и функциями CLR.Установка объектов SQL в C# - проблема при установке скриптов сборки и функций CLR

Он будет работать до конца и создать CLR сборки ОК, но когда он затем попытался создать функцию она возвращается сообщение об ошибке:

Incorrect syntax near the keyword 'FUNCTION'. Incorrect syntax near the keyword 'AS'.

Я попытался создать сборку и функцию с помощью сценария непосредственно в SSMS и работает нормально. Я также запускаю скрипт функции на своем C# после создания сборки в SSMS, и это работает нормально. Кажется, он просто не создает функцию, если оба сценария запускаются через C#.

C# код для выполнения сценария SQL:

var fileInfo = new FileInfo(sqlDirectory + "\\" + fileName); 
var script = fileInfo.OpenText().ReadToEnd(); 

if (!String.IsNullOrEmpty(script)) 
{ 
    string sqlBatch = string.Empty; 

    script += "\nGO"; 

    try 
    { 
     foreach (
      string line in 
       script.Split(new string[2] {"\n", "\r"}, 
        StringSplitOptions.RemoveEmptyEntries)) 
     { 
      if (line.ToUpperInvariant().Trim() == "GO") 
      { 
       if (sqlBatch != "") 
       { 
        cmd.CommandType = CommandType.Text; 

        cmd.CommandText = sqlBatch; 

        cmd.ExecuteNonQuery(); 
        sqlBatch = string.Empty; 
       } 
      } 
      else 
      { 
       sqlBatch += line + "\n"; 
      } 
     } 

     fileInfo.OpenText().Close(); 
    } 
    catch (Exception err) 
    { 
     var context = HttpContext.Current; 
     Global.InstallError = "File Name: " + fileName + "<br/>" + 
           "Error: " + err.Message; 
    } 
} 

CLR Функция:

/****** Object: UserDefinedFunction [dbo].[fn_JSON_FormatArray] Script Date:  03/07/2013 11:52:18 ******/ 
SET ANSI_NULLS OFF 
GO 

SET QUOTED_IDENTIFIER OFF 
GO 

CREATE FUNCTION [dbo].[fn_JSON_FormatArray](@value [xml], @label [nvarchar](4000)) 
RETURNS [xml] WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [CLRExtensions].[UserDefinedFunctions].[fn_JSON_FormatArray] 
GO 

EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFile', @value=N'JSON\fn_JSON_FormatArray.cs' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'fn_JSON_FormatArray' 
GO 

EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFileLine', @value=N'11' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'fn_JSON_FormatArray' 
GO 

ответ

0

Я теперь неподвижную эту проблему. Проблема заключалась в том, что я использовал тот же SQLCommand позже для выполнения хранимой процедуры (поскольку я дал команду SQLTransaction, чтобы я мог откатиться, если она терпит неудачу) и забыл удалить параметры, которые были добавлены при запуске следующую текстовую команду. Поэтому он запускал первый файл сценария и впоследствии не выполнялся.

 Смежные вопросы

  • Нет связанных вопросов^_^