T-SQL (varchar (max) против CLR (строка, SqlString, SqlChars)? - PullRequest
8 голосов
/ 28 сентября 2011

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

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

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

Ответы [ 3 ]

12 голосов
/ 12 апреля 2014

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

[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }
4 голосов
/ 29 сентября 2011

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

Можете прочитать здесь 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 в два раза.

0 голосов
/ 28 сентября 2011

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

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