交叉发布于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.
}
}
}
答案 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();
}