T-SQL(VARCHAR(最大值)VS CLR(字符串的SqlString,SqlChars)?
我有一个问题,我解决不了。我使用的是SQL Server 2005中,C#CLR使用外部DLL。问题我需要使用作为函数参数类型varchar(max)
。如果在C#代码我使用string
,SqlSring
,我不能使用T-SQL类型varchar(max)
,只需varchar(4000)
nvarchar(4000)
。我需要说,这可以是当我需要使用超过4000个符号时,所以我需要知道,我需要使用什么C#类型来处理varchar(max)
。T-SQL(VARCHAR(最大值)VS CLR(字符串的SqlString,SqlChars)?
我已经阅读了很多文章,其中有几篇文章说,为此我可以使用SqlChars
。但是!我有操纵字符串。我怎么可以采取行动string
或SqlString
然后转换为SqlChars
? (这可能是SqlChars.ToString()
或SqlChars.ToSqlString()
)。
我没有找到任何C#代码。
尝试使用长度-1
。事情是这样的:
cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog";
我不能尝试这个,因为我没有SqlCommand ...只需输入参数 - 操作它 - 输出参数。我需要IN/OUT参数为SqlChars –
虽然'-1'在技术上是正确的,但这个答案仍然与问题无关。这个答案是处理SqlConnection API而不是SQLCLR API。 –
我找到了答案。不只是只有我问了这个问题。我要读的帖子更用心......
能读到这里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
。
SQLCLR不允许使用'VARCHAR',无论是1 - 4000还是'MAX'。 'NVARCHAR'是SQLCLR API通过的唯一字符串类型(好吧,我猜''object' /'SQL_VARIANT'也可以传递一个高达4000的字符串)。如果您传入'VARCHAR'值,它们将被隐式转换为'NVARCHAR'。请不要使用或建议将'string'用作SQLCLR输入或输出参数类型。有关更多信息,请参阅我的系列[[SQLCLR的阶梯]](http://www.sqlservercentral。com/stairway/105855 /),在SQL Server Central上(该站点需要免费注册)。 –
你需要做的就是添加SqlFacet(MAXSIZE = -1)属性参数:
[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }
正确!这将导致VS自动创建正确的脚本! –
这个答案是正确的,应该标记为“接受”。 +1 –
一个'VARCHAR(最大)目前正使用它的最大容量将不加载到CLR字符串'字符串,因为它会耗尽地址空间。你能更明确地说明你想对这些字符串执行什么操作吗? –
我将任何SQL类型转换为varchar并将此值发送到外部dll。比,对它进行操作并返回到SQL Server。现在我使用SQL/vchar(4000)和C#/字符串。我需要超过4000个符号。 –
@Damien_The_Unbeliever:我的印象是既SQL Server的'VARCHAR(最大值)'还有一个.NET'string'例如可能高达2 GB的大小.... –