Просто измените строку:
var indexPath = 0
на:
let indexPath: IndexPath
Или замените все это на:
let indexPath = IndexPath(item: sender.tag + (PlaylistController.shared.playlists.count == 1 ? 1 : -1), section: 0)
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.
Я думаю с помощью-1 для размера, работал бы. По крайней мере, это должно с ADO.NET. Как это:
objOutParam1 = objCommand. Параметры. Добавьте (" @RStr", OleDbType.varchar,-1)
Это - длинная статья, но она показывает использование-1 в последнем примере:
Можно ли использовать 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;
Не уверенный, удовлетворит ли это Вашим потребностям, но это должно работать просто великолепно.
Имейте Вас, пытался указать:
objOutParam1.Size = Int32.MaxValue;
На что похожа эта большая строка? Это - возможно, что-то, что могло быть лучше возвращено через дополнительный официальный набор документов или является им просто текст примечания?
Вы попытались не указать размер?
Вы могли возвратить ТЕКСТ вместо VARCHAR (МАКС)?
Вы попробовали "OleDbType. LongVarChar", этот тип отображается для отправки текстовых сообщений в SQL-сервере 2K и позволяет Вам получить больше, чем 8K символы.
Просто используйте интервал. MaxValue для размера параметра. Байт [] из sproc будет иметь корректную длину. (Я acutally использую varbinary, но результатами будет то же).
param.Size = int.MaxValue;
param.SqlDbType = SqlDbType.VarBinary;
Опция -1 работает довольно хорошо. Я использую его в нескольких случаях, когда у меня есть возврат varchar (max) из сохраненного процесса.
Коротким ответом является ТЕКСТ использования вместо 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.