Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 27.12.2011, 10:05   #1
mrChester
Я
Участник клуба
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Адрес: Уфа
Сообщений: 693
Репутация: 261

icq: 3170154
Восклицание Ошибка: 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
Репутация: 46
По умолчанию

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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 14:18
Ошибка:*** glibc detected *** free(): invalid next size (fast): 0x0807dc70 *** ciaonataha Общие вопросы C/C++ 3 05.05.2009 16:58


08:41.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.