Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 10:05   #1
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
Восклицание Ошибка: String[1]: the Size property has an invalid size of 0.

Такая проблема возникла.
Вот приблизительный код в С#
Код:
string result;
                using (SqlConnection conn = GetConnection())
                {
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "db.p_stroka_get";

                        cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.BigInt) { Value = id });
                        cmd.Parameters.Add(new SqlParameter("@stroka", SqlDbType.VarChar) { Direction = ParameterDirection.Output });
                        cmd.ExecuteNonQuery();
                        result = cmd.Parameters["@stroka"].Value != DBNull.Value ? cmd.Parameters["@stroka"].Value.ToString(): null;
                    }
                }
                return result;
Это приблизительный код хранимой процедуры
Код:
alter PROCEDURE [db].[p_stroka_get] 	
	@id   bigint,			-- ИД
	@stroka varchar = NULL OUTPUT 	-- строка которую надо получить
AS
BEGIN
	SELECT @stroka = stroka_col 
	FROM db.database	WHERE id = @id
END
Выходит ошибка String[1]: the Size property has an invalid size of 0.
Строка не может иметь длину меньше 1. В базе она может принимать значение NULL, в таком случае надо присвоить result значение NULL, борюсь с этим уже не один час. Искал подсказку в инете, но что-то ничего не нашел. Подскажите как это реализовать
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 18.01.2012, 20:06   #2
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Цитата:
Сообщение от mrChester Посмотреть сообщение
Такая проблема возникла.
Вот приблизительный код в С#
Код:
string result;
                using (SqlConnection conn = GetConnection())
                {
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "db.p_stroka_get";

                        cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.BigInt) { Value = id });
                        cmd.Parameters.Add(new SqlParameter("@stroka", SqlDbType.VarChar) { Direction = ParameterDirection.Output });
                        cmd.ExecuteNonQuery();
                        result = cmd.Parameters["@stroka"].Value != DBNull.Value ? cmd.Parameters["@stroka"].Value.ToString(): null;
                    }
                }
                return result;
Это приблизительный код хранимой процедуры
Код:
alter PROCEDURE [db].[p_stroka_get] 	
	@id   bigint,			-- ИД
	@stroka varchar = NULL OUTPUT 	-- строка которую надо получить
AS
BEGIN
	SELECT @stroka = stroka_col 
	FROM db.database	WHERE id = @id
END
Выходит ошибка String[1]: the Size property has an invalid size of 0.
Строка не может иметь длину меньше 1. В базе она может принимать значение NULL, в таком случае надо присвоить result значение NULL, борюсь с этим уже не один час. Искал подсказку в инете, но что-то ничего не нашел. Подскажите как это реализовать
Ну хранимка неправильно написана это первое, а второе

cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.BigInt) { Value = id });
cmd.Parameters.Add(new SqlParameter("@stroka", SqlDbType.VarChar) { Direction = ParameterDirection.Output });

Тут ты добавляешь 2 параметра, хотя у тебя всего 1 параметр, т.к. OUTPUT это возвращаемое значение... Я не тестил, но ошибка должно быть в этом надо ковыряться. точку останова ставь и дебаж код
1 старый программист, лучше новых 2-х
Droid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[SIZE="4"]Найти максимальное число y Delphi[/SIZE] Артем1904 Помощь студентам 5 16.12.2011 10:22
Резиновый font-size, Как сделать резионвый font-size в блоке? AlienNation HTML и CSS 0 26.09.2011 09:14
Динамическое создание таблиц.Invalid field size Студло Помощь студентам 4 30.03.2010 08:30
TImage size guffer Мультимедиа в Delphi 2 25.10.2009 13:18
Ошибка:*** glibc detected *** free(): invalid next size (fast): 0x0807dc70 *** ciaonataha Общие вопросы C/C++ 3 05.05.2009 16:58