这是C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace SqlServerAssCodeConsoleApp
{
public class ClrTestPro
{
[SqlProcedure]
public static void PipInfo(string info)
{
SqlPipe pip = SqlContext.Pipe;
pip.Send("c# code sended msg!");
}
}
}
使用的是.net framework 3.5
----
这是sql代码:
sp_configure enable, 1;
reconfigure--开启clr集成功能
create assembly testAss
from 'E:\Test.dll'
with permission_set = safe
go
--到这里是成功的
create procedure cp_test
@info nvarchar(200)
as external NAME testAss.ClrTestPro.PipInfo
数据库报出错误:
消息 6505,级别 16,状态 2,过程 cp_test,第 1 行
在程序集 'Test' 中找不到类型 'ClrTestPro'。
===================================
这是怎么回事,求解
我虽然不懂英文,你也不能这么骗我吧,
1+2+3+4不是应该是
testAss.SqlServerAssCodeConsoleApp.ClrTestPro.PipInfo
不行啊,第三个点哪里报语法错误。
@北在北方: 那是另外一个问题了。你先看下test.dll里面的类全名吧,
看是
testAss.SqlServerAssCodeConsoleApp.ClrTestPro.PipInfo
还是
test.SqlServerAssCodeConsoleApp.ClrTestPro.PipInfo
@爱编程的大叔: 第一个点前面必须是在数据库中注册的程序集的名字,也就是说必须是testAss.
语法上是这样Create Procedure <Procedure Name>
AS External Name <Assembly Identifier>.<Type Name>.<Method Name>
没说类的命名空间怎么写。
@爱编程的大叔: 明白怎么回事了,中间的TypeName确实是命名空间+类名,只是需要用方括号括起来,应该是这样:testAss.[SqlServerAssCodeConsoleApp.ClrTestPro].PipInfo
@北在北方: 多看看书吧,我也不懂你看的是哪家的。