J'ai écrit du C# pour exécuter des scripts SQL spécifiés, séparer les commandes du séparateur de lots GO et exécuter chaque commande. C'est ainsi que les objets SQL peuvent être installés au début de l'application. Cependant, j'ai un problème avec l'installation des assemblages et des fonctions CLR.Installation d'objets SQL en C# - problème lors de l'installation de scripts d'assemblage et de fonctions CLR
Il se déroulera à travers et créer l'assemblage CLR OK, mais quand il a ensuite essayé de créer la fonction, il retourne l'erreur:
Incorrect syntax near the keyword 'FUNCTION'. Incorrect syntax near the keyword 'AS'.
J'ai essayé de créer l'assemblage et la fonction en utilisant le script directement SSMS et ça fonctionne bien. J'ai également exécuté le script de fonction dans mon C# après avoir créé l'assembly dans SSMS et ceci fonctionne bien. Cela ne semble pas créer la fonction si les deux scripts sont exécutés en C#.
C# Code pour exécuter le script 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 Fonction:
/****** 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