Я могу возвратить varchar (макс.) из хранимой процедуры?

Просто измените строку:

var indexPath = 0

на:

let indexPath: IndexPath

Или замените все это на:

let indexPath = IndexPath(item: sender.tag + (PlaylistController.shared.playlists.count == 1 ? 1 : -1), section: 0)
9
задан Seibar 21 October 2008 в 21:38
поделиться

10 ответов

Upvoted Ed Altofer. (Он ответил сначала, поэтому если Вам нравится мой голос ответа его также).

OleDb является Вашей проблемой. Это - универсальное соединение с базой данных, которое должно говорить с больше, чем просто SQL Server, и в результате у Вас есть ситуация с наименьшим общим знаменателем, где только самый слабый составной набор функций может полностью поддерживаться. Одной из потерянных функций является varchar (макс.) поддерживают.

Вы используете SQL Server 2005 и VB.Net. Что останавливает Ваш от использования Системы. Данные. SqlClient, а не Система. Данные. OleDb?

Править
Я нашел документацию относительно проблемы. Посмотрите здесь:
http://msdn.microsoft.com/en-us/library/ms131035.aspx

Соответствующая часть:

Возвращаемые значения типа данных varchar (макс.), nvarchar (макс.), varbinary (макс.), xml, udt, или другие типы большого объекта не могут быть возвращены к версиям клиента ранее, чем SQL Server 2005. Если Вы хотите использовать эти типы в качестве возвращаемых значений, необходимо использовать Собственный Клиент SQL Server.

8
ответ дан 4 December 2019 в 10:34
поделиться

Я думаю с помощью-1 для размера, работал бы. По крайней мере, это должно с ADO.NET. Как это:

objOutParam1 = objCommand. Параметры. Добавьте (" @RStr", OleDbType.varchar,-1)

Это - длинная статья, но она показывает использование-1 в последнем примере:

http://msdn.microsoft.com/en-us/library/bb399384.aspx

4
ответ дан 4 December 2019 в 10:34
поделиться

Можно ли использовать ADO.NET?

Править: Для разъяснения я просто предполагаю, что Вы могли бы хотеть рассмотреть ADO.NET, так как Вы работаете с VB.NET 2005 и SQL Server 2005 - OLEDB был pre-.NET способ получить доступ к базам данных, таким образом, можно найти больше гибкости при помощи ADO.NET вместо этого.

Вы не должны возвращать VARCHARs из хранимой процедуры. Я даже не уверен, что Вы можете.

Однако, если Вы используете параметр, Вам не придется указать его размером. Например:

SqlParameter p = new SqlParameter("@RStr", SqlDbType.VarChar);
p.Direction = ParameterDirection.Output;

Не уверенный, удовлетворит ли это Вашим потребностям, но это должно работать просто великолепно.

8
ответ дан 4 December 2019 в 10:34
поделиться

Имейте Вас, пытался указать:

objOutParam1.Size = Int32.MaxValue;
0
ответ дан 4 December 2019 в 10:34
поделиться

На что похожа эта большая строка? Это - возможно, что-то, что могло быть лучше возвращено через дополнительный официальный набор документов или является им просто текст примечания?

0
ответ дан 4 December 2019 в 10:34
поделиться

Вы попытались не указать размер?
Вы могли возвратить ТЕКСТ вместо VARCHAR (МАКС)?

1
ответ дан 4 December 2019 в 10:34
поделиться

Вы попробовали "OleDbType. LongVarChar", этот тип отображается для отправки текстовых сообщений в SQL-сервере 2K и позволяет Вам получить больше, чем 8K символы.

0
ответ дан 4 December 2019 в 10:34
поделиться

Просто используйте интервал. MaxValue для размера параметра. Байт [] из sproc будет иметь корректную длину. (Я acutally использую varbinary, но результатами будет то же).

 param.Size = int.MaxValue;
 param.SqlDbType = SqlDbType.VarBinary;
0
ответ дан 4 December 2019 в 10:34
поделиться

Опция -1 работает довольно хорошо. Я использую его в нескольких случаях, когда у меня есть возврат varchar (max) из сохраненного процесса.

0
ответ дан 4 December 2019 в 10:34
поделиться

Коротким ответом является ТЕКСТ использования вместо VARCHAR (макс.). 8K является максимальным размером страницы базы данных, где все Ваши столбцы данных должны вписаться кроме BLOB и ТЕКСТА. При значении полезная мощность является меньше, чем 8k из-за других столбцов.

BLOB и ТЕКСТ являются так сетью 1.0. Большие строки означают большее время репликации баз данных и больший файловый ввод-вывод. Я предлагаю, чтобы Вы поддержали отдельный файловый сервер с интерфейсом HTTP для этого.

И, для предыдущего столбца

DataUrl VARCHAR(255) NOT NULL,

При вставке новой строки сначала вычислите контрольную сумму MD5 данных. Во-вторых, загрузите данные на файловый сервер с контрольной суммой как имя файла. В-третьих, INSERT INTO... (..., DataUrl) ЗНАЧЕНИЯ (..., "http://fileserver/get?id=". md5_checksum_data)

С этим дизайном Ваша база данных останется спокойной, даже если средний размер данных станет 1000x.

-1
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: