使用" clr启用"部署SQL Server Express LocalDB数据库应用程序

时间:2015-07-28 15:31:04

标签: .net sql-server clr sqlclr localdb

交叉发布于MSDN

我的应用使用codeplex

上的group_concat自定义函数

在目标计算机上启动应用程序时出现以下错误。

Execution of user code in the .NET framework is disabled. Enable clr enabled configuration option.

假设在目标计算机上安装了localdb,我该怎么做才能在安装时启用clr?在我的机器上,我刚打开SSMS并在那里执行了脚本。

sp_configure 'clr enabled', 1; GO RECONFIGURE; GO

但是,SSMS不会安装在大多数客户端上,我不知道如何制作它,因此数据库可以使用这些功能。有什么建议吗?

修改 我试图以两种不同的方式在应用程序中使用c#进行设置,但两者都失败了。

 public void EnableCLR(string ConnectionString)
    {
        using(SqlConnection con = new SqlConnection(ConnectionString))
        {
            using(SqlCommand cmd = new SqlCommand("sp_configure 'clr enabled', 1", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                con.Open();

                cmd.ExecuteNonQuery(); //Error: Unable to find stored procedure "sp_configure 'clr enabled', 1"
            }
        }
    }

然后我尝试了这个

 public void EnableCLR(string ConnectionString)
    {
        using(SqlConnection con = new SqlConnection(ConnectionString))
        {
            using(SqlCommand cmd = new SqlCommand("sp_configure", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                con.Open();

                SqlParameter clrParam = new SqlParameter();

                clrParam.ParameterName = "clr enabled";

                clrParam.Value = 1;

                cmd.Parameters.Add(clrParam);

                cmd.ExecuteNonQuery(); //Error: @clr enabled is not a parameter for procedure sp_configure.
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

您是如何安装LocalDB的?我假设您通过连接字符串附加MDF文件,因此无法在SQL脚本中执行这些语句。

假设没有SQLCMD.EXE运行查询,您应该能够创建一个单独的控制台应用程序,安装程序可以在安装LocalDB后运行。该控制台应用程序可以通过SqlCommand.ExecuteNonQuery()运行SQL语句。这些SQL语句可以是硬编码的(更难更改),也可以从app.exe.Config文件中获取配置SQL。

有些事情:

SqlConnection _Connection = new SqlConnection(@"(localdb)\InstanceName");
SqlCommand _Command = null;

try
{
  _Command = _Connection.CreateCommand();
  _Connection.Open();

  _Command.CommandText = "EXEC sp_configure 'clr enabled', 1;";
  _Command.ExecuteNonQuery();

  _Command.CommandText = "RECONFIGURE;";
  _Command.ExecuteNonQuery();
}
finally
{
  if (_Command != null)
  {
    _Command.Dispose();
  }
  _Connection.Dispose();
}