我正在Windows应用程序(Windows CE)上工作,我需要将ID数组发送到存储过程(存储在SQL Server 2012中)。

我正在.net Compact Framework 3.5和C#上工作。

我检查了诸如将列表作为XML属性和表值参数传递的方法,但在紧凑型框架中都给了我相同的错误。

无效的枚举类型SqlDbType.XML
无效的枚举类型SqlDbType.Structured

Havent发现任何表明它们在紧凑框架中不受支持的东西,但它们也无法正常工作。

我还能采取什么其他方法。

最佳答案

如果您只需要传递ID,那么此功能可能会帮助您:

ALTER FUNCTION [dbo].[fn_SplitIds]
(
    @text nvarchar(max)
)
RETURNS @Ids TABLE
(
    Id int UNIQUE
)
AS
BEGIN

declare     @iStart int,
            @iPos int
if substring( @text, 1, 1 ) = ','
begin
    set     @iStart = 2
    insert into @Ids
    values( null )
end
else
    set     @iStart = 1
while 1=1
begin
    set     @iPos = charindex( ',', @text, @iStart )
    if @iPos = 0
            set     @iPos = len( @text )+1
    if @iPos - @iStart > 0
            insert into @Ids
            values  ( cast(substring( @text, @iStart, @iPos-@iStart ) as int))
    else
            insert into @Ids
            values( null )
    set     @iStart = @iPos+1
    if @iStart > len( @text )
            break
end

RETURN
END


我们在项目中使用它来支持一些旧的东西,并且效果很好。只需传递用逗号“,”分隔的整数。

您不需要创建功能。

10-08 15:13