我正在用C#开发一个CLR应用程序。 我遇到了SqlChars类型和SqlString类型。 但是我没有发现它们的区别。 什么时候使用SqlChars,什么时候使用SqlString?
谢谢
我正在用C#开发一个CLR应用程序。 我遇到了SqlChars类型和SqlString类型。 但是我没有发现它们的区别。 什么时候使用SqlChars,什么时候使用SqlString?
谢谢
很抱歉当前选定答案中有些数据的重复,但我想提供一点澄清。
首先,简短的回答:
什么时候使用 SqlChars vs SqlString 取决于您的意图。如果您不打算修改输入字符串,请使用 SqlString。如果需要操作输入,请使用 SqlChars。
现在来讲一些我得出这个结论的细节:
我们可以从文档中看到,SqlChars是一个类,而SqlString是一个结构体。类与结构体超出了本次回复的范围,但可以说结构体更轻量级。您还可以看到 SqlChars 是可变的(您可以更改它而不一定需要新的内存分配)。我找不到关于 SqlString 大小限制的文档,并且我 没有 使用 SqlString 处理大于 VARCHAR(8000)/NVARCHAR(4000) 的数据时遇到过任何问题。如果您遇到了问题,请确保 CLR 代码具有 MaxByteSize = -1。
以下信息来自SQL 类型的 MSDN 文档。
SqlChars 是一个可变的引用类型,它包装了 Char 数组或 SqlString 实例。
SqlString - 表示要存储在数据库中或从数据库中检索的可变长度字符流。SqlString 具有与其对应的 .NET Framework 字符串数据类型不同的基础数据结构。
-- SQL String是.net框架中的一个sqltype。它表示一个可变长度的字符流,用于在数据库中存储或检索。
-- SQLChar是一个可变引用类型,它包装了一个字符数组或SqlString实例。 SqlChar是一个类。 并且你发现的是正确的,即sqlstring仅限于nvarchar(4000),而sqlchars是nvarchar(max)。 (但我们可以使用SqlFacet属性定义参数和返回类型的大小、精度和比例。)
请允许我引用Alastair先生的话:SQLCHAR对系统内存资源的要求较低,因为它不需要像SQLSTRING一样连续的块。