使用VS 2005 在SQL Server 2005 中创建自定义函数 UDF 时发生的问题
2009-04-21 10:20
661 查看
问题一:
对自定义的 Function 和 Store Procedure ,因必须使用限定词: static 静态类型,故其中的Porject 级别的方法和属性及变量,必须为 Static 类型。方法内部定义的变更则不受限定。否则会出错。
问题二:
如需要在Function 中读取SQL Server 中的内容,需要在其属性标识中加入DataAccess 属性。
[Microsoft.SqlServer.Server.SqlFunction(Name = "f_FunctionName", DataAccess = DataAccessKind.Read)]
问题三:
在 UDF 或 SP 中联接 SQL Server ,则需要使用如下方式定义联接:
SqlConnection cnn = new SqlConnection("Context Connection=true")
问题四:
无法调用已加引用的 Web Server , 出现以下错误:
The type or namespace name 'wsROD' could not be found (are you missing a using directive or an assembly
==> 解决方法:
在Web Service 名称前加上当前Project 对应的 Namespace 即可解决,如: SPS_Assembly.wsTest
问题五:
在自定义 Function 中使用了 Web Service 后, 在调试时,运行到Create Web Serivce 时出现以下错误:
Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer. Please see inner exception for more information.
==> 解决方法:
1, 在Project 的 Property 属性设定界面,打开 Build 面板,对属性: Generate serialization assembly 的值,选择"ON"; --- 让程序在Build 时可以生对应的的序列化使用的dll, 如 MyAssembly.XmlSerializers.dll
2, 打开 Database 面板,对属性 Permission Level 选择 "unsafe" 值, 如不使用 unsafe ,则会出现以下错误:
assembly 'MyAssembly' is storing to a static field. Storing to a static field is not allowed in external_access assemblies
3, Build , 然后 Deploy 此Porject;
4, 此时测试时会出现错误,主要原因是由于 Web Service 对应的序列化使用的dll 未放入 SQL Server 的 Assembly 目录中;
5, 将bin/debug 目录下的 MyAssembly.XmlSerializers.dll 序列化 dll 加入 SQL Server 的 Assembly 中:
在 Assemblies 目录中,右击,选择 New Assembly ..., 在打开的Form 中指定序列化dll 的目录,并指定 Pemission set 的安全等级为 unsafe.
注意此中的序列化dll 一定要和MyAssembly.dll 是同一时间Build 并产生的.
6, 此时即可进行测试。
可能的其它SQL DB 配置问题,可试着使用以下Script 变更配置:
EXEC sp_configure @configname = 'Show Advanced Options', @configvalue = 1
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure
EXEC sp_configure @configname = 'clr enabled', @configvalue = 1
RECONFIGURE WITH OVERRIDE
GO
reconfigure
ALTER DATABASE CBIF_PREVIEW SET TRUSTWORTHY ON
相关参考资料:
Dynamic Assembly Loading
http://blogs.msdn.com/sqlclr/archive/2006/10/18/dynamic-assembly-loading.aspx
在SQL SERVER 2005中调用Web Service
http://tech.it168.com/db/2007-09-11/200709111157063.shtml
对自定义的 Function 和 Store Procedure ,因必须使用限定词: static 静态类型,故其中的Porject 级别的方法和属性及变量,必须为 Static 类型。方法内部定义的变更则不受限定。否则会出错。
问题二:
如需要在Function 中读取SQL Server 中的内容,需要在其属性标识中加入DataAccess 属性。
[Microsoft.SqlServer.Server.SqlFunction(Name = "f_FunctionName", DataAccess = DataAccessKind.Read)]
问题三:
在 UDF 或 SP 中联接 SQL Server ,则需要使用如下方式定义联接:
SqlConnection cnn = new SqlConnection("Context Connection=true")
问题四:
无法调用已加引用的 Web Server , 出现以下错误:
The type or namespace name 'wsROD' could not be found (are you missing a using directive or an assembly
==> 解决方法:
在Web Service 名称前加上当前Project 对应的 Namespace 即可解决,如: SPS_Assembly.wsTest
问题五:
在自定义 Function 中使用了 Web Service 后, 在调试时,运行到Create Web Serivce 时出现以下错误:
Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer. Please see inner exception for more information.
==> 解决方法:
1, 在Project 的 Property 属性设定界面,打开 Build 面板,对属性: Generate serialization assembly 的值,选择"ON"; --- 让程序在Build 时可以生对应的的序列化使用的dll, 如 MyAssembly.XmlSerializers.dll
2, 打开 Database 面板,对属性 Permission Level 选择 "unsafe" 值, 如不使用 unsafe ,则会出现以下错误:
assembly 'MyAssembly' is storing to a static field. Storing to a static field is not allowed in external_access assemblies
3, Build , 然后 Deploy 此Porject;
4, 此时测试时会出现错误,主要原因是由于 Web Service 对应的序列化使用的dll 未放入 SQL Server 的 Assembly 目录中;
5, 将bin/debug 目录下的 MyAssembly.XmlSerializers.dll 序列化 dll 加入 SQL Server 的 Assembly 中:
在 Assemblies 目录中,右击,选择 New Assembly ..., 在打开的Form 中指定序列化dll 的目录,并指定 Pemission set 的安全等级为 unsafe.
注意此中的序列化dll 一定要和MyAssembly.dll 是同一时间Build 并产生的.
6, 此时即可进行测试。
可能的其它SQL DB 配置问题,可试着使用以下Script 变更配置:
EXEC sp_configure @configname = 'Show Advanced Options', @configvalue = 1
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure
EXEC sp_configure @configname = 'clr enabled', @configvalue = 1
RECONFIGURE WITH OVERRIDE
GO
reconfigure
ALTER DATABASE CBIF_PREVIEW SET TRUSTWORTHY ON
相关参考资料:
Dynamic Assembly Loading
http://blogs.msdn.com/sqlclr/archive/2006/10/18/dynamic-assembly-loading.aspx
在SQL SERVER 2005中调用Web Service
http://tech.it168.com/db/2007-09-11/200709111157063.shtml
相关文章推荐
- 关于“使用VS 2005和SQL Server 2005创建连接时不允许进行远程连接”的问题的解决
- [原创]SQL Server 2005:一个使用新创建的User的问题和解决方法
- 使用VS 2005和SQL Server 2005创建连接
- 使用VS 2005和SQL Server 2005创建连接
- [SQL Server]创建自定义聚合函数值得注意的问题
- 使用VS 2005和SQL Server 2005创建连接
- VS 2010(2005)Unicode使用cximage库Load函数问题
- SQL Server 2005:一个使用新创建的User的问题和解决方法
- 使用SQL SERVER 内部函数进行密码加密和校验小问题
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)【转】
- SQL server 2005 调用自定义函数
- 在使用时SQL Server 2005 Express时的一些问题
- 请问谁使用过vs 2005水晶报表阿、Sql Server Reporting Services呢?如果要做一个B/s报表系统,用哪个比较好呢?
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- js使用立即调用的函数表达式创建局部作用域问题
- SQL SERVER 2005:在After Insert触发器中使用INSERT后,影响SCOPE_IDENTITY 问题
- Django的template自定义函数的创建和使用
- SQL Server 2005学习之——常用函数与自定义函数
- vs2015使用向导创建SOUI项目问题记录