我有一个问题,我无法解决。我正在使用SQL Server 2005,C#CLR来使用外部dll。问题在于参数的长度。我需要使用函数参数类型varchar(max)
。如果在C#代码中我使用string
,SqlSring
,我就不能使用varchar(max)
的T-SQL类型,而只使用varchar(4000)
的{{1}}。我需要说,当我需要使用超过4000个符号时,情况就是这样,所以我需要知道,我需要使用哪种C#类型nvarchar(4000)
。
我已经阅读了很多文章,其中有几篇文章说,为此,我可以使用varchar(max)
。但!我有字符串操作。如何处理SqlChars
或string
,然后转换为SqlString
? (可能是SqlChars
或SqlChars.ToString()
)。
我没有找到任何C#代码。
答案 0 :(得分:12)
您需要做的是将SqlFacet(MaxSize = -1)属性添加到参数:
[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }
答案 1 :(得分:4)
我找到了答案。不仅仅是我问过这个问题。我必须更专心地阅读帖子......
可以在这里阅读http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a CLR兼容性问题解决起来并不困难。
我一直希望使用varchar(max)
并尝试使用C#类型string
,SqlString
,SqlChars
。需要使用T-SQL nvarchar(max)
,您可以使用任何C#类型string
,SqlString
,SqlChars
!
当然nvarchar
两次占用的空间超过varchar
。
答案 2 :(得分:0)
尝试使用长度-1
。像这样:
cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog";