Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ExecuteNonQuery, возникает исключительная ситуация 
:(
    Опции темы
Atiskara
Дата 10.4.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



при выполнении ExecuteNonQuery возникает исключительная ситуация Cannot convert int to tinyint.. Причем есть 2 базы на mssql, одна тестовая, другая боевая. В тестовой никаких ошибок не возникает. В боевой ошибка возникает у последних зарегенных юзеров, у ранних работает норм, точную временную границу между ними не могу сказать. Подскажите, хотя бы где искать ошибку, в базе или в коде? Код не мой, но баг надо найти мне. С шарпом знакома поверхностно, а шарп вс асп вижу вообще впервые. Или как нужно обработать исключение, чтобы значение возвращалось?

наверно кусок кода мало что скажет
Код

StoredProcedure SP = new StoredProcedure("CHANGERECEIVERDATA", pr);
            SP.ConnectionOpen();
            SP.ExecuteNonQuery();
            SP.ConnectionClose();
            
            if((byte)SP.getParameter(1).Value == 0)
            {
                return 0;
            }
            else
            {
                     return 1;
            }    


после обработки SP.ExecuteNonQuery() параметр (byte)SP.getParameter(1).Value не всегда получает значение...

Код

        public int ExecuteNonQuery()
        {
            try
            {
            sqlCmd.ExecuteNonQuery();
            return 1;
            }
            catch (System.Exception uex)
            {
                System.Console.WriteLine("{0} какая то исключительная ситуация", uex.GetType().ToString());
                System.Console.WriteLine(uex.Message);
                return 0;
            }
            
        }

PM MAIL   Вверх
archeg
Дата 10.4.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: нет
Всего: 27



До (byte)SP.getParameter(1).Value дебаггер не доходит? Если нет - то ошибка в базе. Покажи код процедуры. И если в одной есть ошибка - а в другой нету, то либо там процедуры разные, либо какие-то настройки. 


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Idsa
Дата 10.4.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Atiskara, посмотрите, какие типы у параметров хранимки и используйте аналогичные типы из .NET: тогда не будет проблем с приведением типов и пропаданием значений.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Atiskara
Дата 10.4.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



Код

        public int ExecuteNonQuery()
        {
         //   try
         //   {
            sqlCmd.ExecuteNonQuery();
          //  return 1;
          

когда я трай кетч убираю, то вот здесь возникает ошибка sqlCmd.ExecuteNonQuery();, ну а если с обработкой, то вот if((byte)SP.getParameter(1).Value == 0)

Добавлено через 12 минут и 42 секунды
Цитата(Idsa @ 10.4.2009,  16:52)
Atiskara, посмотрите, какие типы у параметров хранимки и используйте аналогичные типы из .NET: тогда не будет проблем с приведением типов и пропаданием значений.

Хранимка это наверно процедура, где все это выполняется?

Код

                         private int changerecdata()
        {
            System.Data.SqlClient.SqlParameter [] pr = new System.Data.SqlClient.SqlParameter[14];
            pr[0] = new System.Data.SqlClient.SqlParameter("@transferid",SqlDbType.Int);
            pr[1] = new System.Data.SqlClient.SqlParameter("@result",SqlDbType.TinyInt);  // хм.. тут инт чтоли указать?
            pr[2] = new System.Data.SqlClient.SqlParameter("@rec_sattid",SqlDbType.Int);

            ...

            StoredProcedure SP = new StoredProcedure("CHANGERECEIVERDATA", pr);
            SP.ConnectionOpen();
            SP.ExecuteNonQuery();
            SP.ConnectionClose();
            
            if((byte)SP.getParameter(1).Value == 0)
            {
                return 0;
            }
            else
            {
                     return 1;
            } 
           ... 

PM MAIL   Вверх
Idsa
Дата 10.4.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Atiskara @  10.4.2009,  20:58 Найти цитируемый пост)
 // хм.. тут инт чтоли указать?

Там нужно указать тип, сооветствующий типу, прописанному в хранимой процедуре в СУБД.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
archeg
Дата 10.4.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: нет
Всего: 27



Цитата(Atiskara @  10.4.2009,  16:58 Найти цитируемый пост)

Хранимка это наверно процедура, где все это выполняется?

Имелся ввиду код процедуры который на сервере ;)


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Atiskara
Дата 10.4.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



бррр.. а я не знаю, что с чем сравнивать  smile .. То что я выше привела и есть процедура на сервере.. а вот этот параметр  (byte)SP.getParameter(1).Value должен получать единичку, или хотя бы занчение, и фиг его знает, куда в базе его записывает...

Добавлено через 8 минут и 56 секунд
Код

pr[0].Value = (int)Session["transfer_id"];
            pr[1].Direction = ParameterDirection.Output;
            pr[2].Value = Session["rec_sattid"];


вообще непонятно, как этот Value для pr[1] получает значение... Для старых пользователей, это значение откуда то присваивается при выполнении ExecuteNonQuery, а для последних нигде не присваивается.

Это сообщение отредактировал(а) Atiskara - 10.4.2009, 17:31
PM MAIL   Вверх
Partizan
Дата 10.4.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Цитата

То что я выше привела и есть процедура на сервере


Нет...код процедуры хранится в самой СУБД....


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 10.4.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Partizan @  10.4.2009,  22:33 Найти цитируемый пост)
Нет...код процедуры хранится в самой СУБД....

Я бы даже сказал, в самой БД  smile 


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Atiskara
Дата 13.4.2009, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



ура, спасибо спасибо люди всем.. нашлась ошибка  smile и не совсем там где я искала

Код

pr[13] = new System.Data.SqlClient.SqlParameter("@user",SqlDbType.Int);


действительно тип в этой строчке, и тип в базе отличались. Конечно осталось загадкой, почему иногда все работало, а иногда нет...
PM MAIL   Вверх
Idsa
Дата 13.4.2009, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Atiskara @  13.4.2009,  10:40 Найти цитируемый пост)
Конечно осталось загадкой, почему иногда все работало, а иногда нет... 

Никакой загадки в этом нет. Просто иногда возвращалось значение, которое умещалось в TinyInt и приведение типов проходило без проблем, а иногда возвращаемое значение превышало границы TinyInt - соответственно, при приведение типа генерировался Exception.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Atiskara
Дата 13.4.2009, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



ааа..  smile все, понял... я люблю этот форум, 3 раза обращалась сюда, и три раза он меня спасал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1212 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.