标签: sqlclr

.NET Core 2.0 和 SQL Server CLR 之间可以共享类库吗?

我想在 .NET Core 2.0 应用程序和 SQL Server CLR 过程之间共享库。我尝试将共享逻辑放入以下项目类型中:

.NET 标准库

.NET 标准库可以从 .NET Core 项目使用,并且我可以添加来自 SQL Server 项目的引用,但是,不能在 CLR 过程中引用类: 在此输入图像描述

便携式类库

可从 CLR 过程中引用可移植类库。PCL 可以选择以 ASP.NET Core 1.0 为目标,但我无法找到以 .NET Core 2.0 为目标的方法。当我从 .NET Core 2.0 项目引用此库时,出现以下编译错误:

Project PortableLibrary1 is not compatible with netcoreapp2.0 (.NETCoreApp,Version=v2.0). Project PortableLibrary1 supports: dotnet5.0 (.NETPlatform,Version=v5.0)
Run Code Online (Sandbox Code Playgroud)

是否有其他选项可以在 .NET Core 2.0 和 SQL Server CLR 之间共享库?

sqlclr .net-core visual-studio-2017

5
推荐指数
1
解决办法
2337
查看次数

在sql server SQLCLR中同步对静态变量的访问

我编写了一个集成在sql server中的程序集,提供了一些用C#编写的存储过程.该程序集具有一个只读静态变量,用于保存一些配置数据.该数据通过存储过程进行操作,存储过程也由程序集提供.显然我必须同步访问这个静态变量.我试着用

lock(someGuard)
{
    // ... access static configuration
}
Run Code Online (Sandbox Code Playgroud)

在我的配置类中.但后来我得到一个HostProtectionException,告诉我,程序集必须以完全信任的方式运行才能做到这一点.有没有更好的方法呢?

c# sql-server synchronization sqlclr

4
推荐指数
1
解决办法
2704
查看次数

在SQL 2005中使用WITH PERMISSION_SET = UNSAFE是不是很糟糕?

我需要使用CLR来创建一个使用.net 3.5中的东西的存储过程.如果我没有把Permission_Set = UnSafe我做不到它会死,然后给我这个错误

部署错误SQL01268:.Net SqlClient数据提供程序:消息6503,级别16,状态12,行1程序集'system.core,版本= 3.5.0.0,culture = neutral,publickeytoken = b77a5c561934e089.' 在SQL目录中找不到.批处理执行时发生错误.

所以我找到了这篇文章

http://weblogs.asp.net/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx

最后一行说明了这一点

"现在DBA肯定不会让我使用它,但构建它很有趣." 我不确定他是否指的是设置为不安全的权限.

如果你这样做,会发生一些巨大的漏洞吗?

.net c# sql-server sql-server-2005 sqlclr

4
推荐指数
1
解决办法
2862
查看次数

TSQL - 执行CLR权限

我从CLR(.net Assembly)获得了一个sql过程,当执行时返回错误

Msg 6522, Level 16, State 1, Procedure sp_HelloWorld, Line 0
A .NET Framework error occurred during execution of user defined routine or aggregate 'sp_HelloWorld': 
System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException: 
   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.PermissionSet.Demand()
   at System.Data.Common.DbConnectionOptions.DemandPermission()
   at System.Data.SqlClient.SqlConnection.PermissionDemand()
   at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at HelloWorld.SQLCLR.HelloWorld()
Run Code Online (Sandbox Code Playgroud)

这是我的SQL脚本

go
drop procedure HelloWorld
drop assembly HelloWorld
GO

create assembly HelloWorld from 'F:\HelloWorld.dll'
with …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sqlclr database-permissions

4
推荐指数
1
解决办法
8409
查看次数

塞拉塞拉,色拉!Net Framework 4.0对SQL 2008的支持?

我做了很多工作来开发CLR例程来实现DAL功能,使用VS2010打算将它们移植到SQL2008R2 clr程序集; 单元测试了,一切似乎都没问题.然后是将它们放入SQL CLR程序集的那一天..唉!,SQL2008只支持低于框架3.5的程序集!采用c#4.0功能的日子现在必须被丢弃并滑回c#2.0.花了很多天.

我可以将Framework 4 CLR程序集与SQL2010一起使用吗?

SQL2008R2中是否支持框架4.0支持?如果是的话?

c# sqlclr .net-4.0 sql-server-2008

4
推荐指数
1
解决办法
1752
查看次数

如何将SQL CLR存储过程部署到多个服务器

我继承了一个SQL CLR项目,作为我正在为客户工作的代码维护项目的一部分.不可否认,我对SQL CLR很陌生,所以我想弄清楚它是如何工作的.

我注意到数据库连接字符串存储在项目的属性中,所以如果需要,我知道如何更改它.我遇到的一个问题是:是否可以设置多个连接字符串以部署到多个SQL Server实例?在我的例子中,我有一个本地开发机器,一个登台服务器和一个生产服务器(每个服务器上有一个目标数据库的单独副本).我希望能够将SQL CLR程序集部署到所有3,而无需更改连接字符串并为每个连接字符串重新构建.

sql-server deployment sqlclr

4
推荐指数
1
解决办法
6509
查看次数

如何在SQL Server 2012中的SQLCLR程序集中使用TimeZoneInfo

我想在SQL Server 2012中实现时区转换.但是,TimeZoneInfo标有MayLeakOnAbort属性.当调用我定义的SQL函数(使用TimeZoneInfo)时,这会导致运行时错误.

报告错误如下

System.Security.HostProtectionException:尝试执行CLR主机禁止的操作.

受保护的资源(仅在完全信任的情况下可用)是:全部

需求的资源是:MayLeakOnAbort

文档暗示我可以使用"SafeHandle"来解决这个泄漏问题,但我不知道如何.

那么,如何在SQLCLR上下文中使用类TimeZoneInfo?

跟进:

我在网站上发现了另一个问题,虽然它涉及SQL 2005,但它规定了一个适用于2012的行动.但是,这个解决方案的某些方面并不令人满意.

.net sql sql-server timezone sqlclr

4
推荐指数
1
解决办法
3958
查看次数

VS2013数据库项目没有生成DLL

如何在VS2013数据库项目中禁用生成dll?

我根本不使用SQLCLR.

database sql-server sqlclr visual-studio-2013 sql-server-data-tools

4
推荐指数
1
解决办法
1822
查看次数

如何解决VS2013错误SQL71501:过程X有一个未解析的程序集Y引用?

作为我们从Visual Studio 2010升级到2013的努力的一部分,我正在查看需要EXTERNAL访问的几个SQL Server CLR存储过程,并且为此目的将在单独的程序集中隔离.我几乎没有任何东西可以轻松地建造,但这给了我一些麻烦.

由于所讨论的程序集使用新.sqlproj项目类型显然根本不喜欢的Web引用,并且能够继续,我们决定使用VS2010 SP1单独构建该程序集并引用已编译的DLL.组件本身构建得很好,VS2013没有关于引用本身的抱怨.

以下是SQL CLR SP的外观(请不要问我地球上分号最后在那里做了什么):

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Text;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static int SQLCLR1(
        SqlString in1,
        SqlString in2,
        SqlString in3,
        SqlString in4,
        SqlString in5
        )
    {
        // ... code elided ... //
    }
};
Run Code Online (Sandbox Code Playgroud)

而SQL方面:

CREATE PROCEDURE [dbo].[SQLCLR1]
    @in1 [nvarchar](4000),
    @in2 [nvarchar](4000),
    @in3 [nvarchar](4000),
    @in4 [nvarchar](4000),
    @in5 [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [External].[StoredProcedures].[SQLCLR1] …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlclr visual-studio visual-studio-2013

4
推荐指数
1
解决办法
8563
查看次数

无法将System.IO.Compression添加到SQL Server中的受信任程序集

我试图在NET 4.5中创建一个SQLCLR存储过程,摆弄ZIP文件.显然System.IO.Compression不在SQL Server的批准列表上,但这是我尝试通过SQL Server Management Studio手动添加它时得到的.如果我尝试CREATE ASSEMBLY通过查询执行,也会发生同样的情况.有任何想法吗?为什么这是禁忌?

我也尝试在SSMS中运行此命令:

CREATE ASSEMBLY SystemIOCOMPRESSION
  FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.IO.Compression.dll'
  WITH PERMISSION_SET = EXTERNAL_ACCESS
Run Code Online (Sandbox Code Playgroud)

...结果与我通过SSMS UI尝试的结果相同.

来自SSMS的错误提示

.net c# sql-server ssms sqlclr

4
推荐指数
1
解决办法
1712
查看次数