T-SQL (varchar (max) vs CLR (строка, SqlString, SqlChars)?

У меня проблема, которую я не могу решить. Я использую SQL Server 2005, С# CLR для использования внешней dll. Проблема заключается в длине параметра. Мне нужно использовать как тип параметра функции varchar(max). Если в коде С# я использую string, SqlSring, я не могу использовать тип T-SQL varchar(max), просто varchar(4000) of nvarchar(4000). Мне нужно сказать, что это могут быть ситуации, когда мне нужно использовать более 4000 символов, поэтому мне нужно знать, какой тип С# мне нужно использовать для varchar(max).

Я прочитал много статей, и некоторые из них говорят, что для этого я могу использовать SqlChars. Но! У меня есть манипуляции со строками. Как я могу иметь действия с string или SqlString, а затем преобразовать в SqlChars? (Возможно SqlChars.ToString() или SqlChars.ToSqlString()).

Я не нашел для этого кода С#.

Ответы

Ответ 1

Что вам нужно сделать, это добавить атрибут SqlFacet (MaxSize = -1) к параметру:

[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }

Ответ 2

Я нашел ответ. Не только я спросил об этом вопросе. Я должен читать сообщения более внимательно...

Здесь можно прочитать http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a Проблема совместимости с CLR решает не очень сложно.

В любое время я хотел использовать varchar(max) и пытался использовать типы С# string, SqlString, SqlChars. Необходимо использовать T-SQL nvarchar(max), и вы можете использовать любой из типов С# string, SqlString, SqlChars!

Конечно, nvarchar занимает больше места, чем varchar в два раза.

Ответ 3

Попробуйте использовать длину -1. Что-то вроде этого:

cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog";