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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ХП не добавляет запись 
:(
    Опции темы
Unsane
Дата 5.3.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вызываю хп из программы, id возвращаетсы верный, а вот запись не добавляется, хотя если вызывать вручную из query analiser, то запись добавляется..
Код

            int id = -1;
            using (SqlConnection con = new SqlConnection(connectionString))
            {

                using (SqlCommand cmd = new SqlCommand("AddPeople", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@firstName", newPeople.FirstName);
                    cmd.Parameters.AddWithValue("@middleName", newPeople.MiddleName);
                    cmd.Parameters.AddWithValue("@lastName", newPeople.LastName);
                    cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));
                    cmd.Parameters["@id"].Direction = ParameterDirection.Output;
                    con.Open();
                    cmd.ExecuteNonQuery();
                    id = Convert.ToInt32(cmd.Parameters["@id"].Value);
                }
            }
            return id;


Код

ALTER PROCEDURE dbo.AddPeople(
    @firstName nchar(20),
    @middleName nchar(20),
    @lastName nchar(20),
    @id int OUTPUT
    )
AS
BEGIN
    INSERT INTO people
    (
        firstName, 
        middleName, 
        lastName
            ) 
    VALUES (
        @firstName,
        @middleName,
        @lastName
            )
    SET @id = Scope_Identity()
    RETURN @id
END

--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
thomas
Дата 5.3.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Unsane, 
На первый взгляд в коде C# все верно, тут ошибок точно нет.
А вот код процедуры у меня немного отличается.
dbo и имя хп в квадратных скобках, обьявление параметров без круглых скобок.
И @id не SET a SELECT. И без return.
Код

ALTER PROCEDURE [dbo].[AddPeople]
    @firstName nchar(20),
    @middleName nchar(20),
    @lastName nchar(20),
    @id int OUTPUT
AS
BEGIN
    INSERT INTO people
        (
        firstName, 
        middleName, 
        lastName
        ) 
    VALUES 
        (
        @firstName,
        @middleName,
        @lastName
         )
    SELECT @id = Scope_Identity()
END
 

Да, еще одно, поле id в таблице people должно быть типа int и с автонумерацией.
Но раз у теюя возвращается верный id, значит так оно и есть.

А вообще странно. Ведь id может вернуться только после добавления новой строки в таблицу.




--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Unsane
Дата 5.3.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(thomas @ 5.3.2008,  21:30)
Да, еще одно, поле id в таблице people должно быть типа int и с автонумерацией.
Но раз у теюя возвращается верный id, значит так оно и есть.

А вообще странно. Ведь id может вернуться только после добавления новой строки в таблицу.

В таблице 2 записи(добавлял вручную) с индексами 1 и 2. При запуске из проги возвращает id = 3, но не добавляет запись.

з.ы. id естественно int + identity

Это сообщение отредактировал(а) Unsane - 5.3.2008, 21:38
--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
thomas
Дата 5.3.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Unsane, 
Цитата

хотя если вызывать вручную из query analiser,

а ты management studio имеешь?
попробуй там выполнить процедуру.
Хотя на вид она правильно написана.

Не знаю точно, но проверь свойства таблицы, какие права на нее установлены у пользователя. Может там ограничения выставлены.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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