In a discussion with Remus Rusanu, he reminded me that if you use a SqlString to pass a varchar(max) to a client application, the whole value is copied into the memory (think big - a varchar(max) can have up to 2GB). The alternative is to use streaming and one method of doing that is to use SqlChars.