Хранимая процедура не выполняется ASP.NET C #

1

Я действительно не знаю, что делать. Не могли бы вы мне помочь?

То, что я пытаюсь сделать, заключается в том, что, когда человек наблюдает за изменением своих данных, показанных на экране, взятых из базы данных, когда они заканчивают модификацию, они нажимают кнопку и что там, где хранимая процедура приходит, проверяет, были ли данные изменены, обновляется но если он не изменен... ну, он не изменяет базу данных, но когда я запускаю proyect, он просто не работает.

Самое забавное, что хранимая процедура работает на SQLServer, но на С# этого не произойдет.

Вот мой код:

Хранимая процедура:

    Create Procedure SP_PDF
    (@nombre varchar(50), @tel int, @dir varchar(50), @rfc char(13))
    as
    declare @cont int
    set @cont = 0
    while(@cont < 4)
    Begin
        if((select nombre from cat_cliente where rfc = @rfc) != @nombre)
            Begin
                update cat_cliente set nombre = @nombre 
            End
        else
            Begin
                set @cont += 1
            End 
        if((select telefono from cat_cliente where rfc = @rfc) != @tel)
            Begin
                update cat_cliente set telefono = @tel
            End
        else
            Begin
                set @cont += 1
            End
        if((select direccion from cat_cliente where rfc = @rfc) != @dir)
            Begin
                update cat_cliente set direccion = @dir
            End
        else
            Begin
                set @cont += 1
            End
    End

С#:

        String query = "exec SP_PDF @nombre, @tel, @dir, @rfc";
        SqlCommand cmd = new SqlCommand(query, cnx);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@nombre", SqlDbType.VarChar).Value = Nombre.Text;
        cmd.Parameters.AddWithValue("@tel", SqlDbType.Int).Value = Telefono.Text;
        cmd.Parameters.AddWithValue("@dir", SqlDbType.VarChar).Value = Direccion.Text;
        cmd.Parameters.AddWithValue("@rfc", SqlDbType.Char).Value = RFC.Text;

        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataSet set = new DataSet();

        try
        {
            cnx.Open();
            cmd.ExecuteNonQuery();
            adp.Fill(set);
            Response.Write("<script>window.alert('¡Funciono!');</script>");
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cnx.Close();
        }
Теги:
stored-procedures
sql-server-2008-r2

4 ответа

2

Попробуйте это Изменить ваш SP, как показано ниже.

ALTER Procedure SP_PDF
(@nombre varchar(50), @tel int, @dir varchar(50), @rfc char(13))
as
declare @cont int
set @cont = 0


declare @sp_nombre varchar(50) 
declare @sp_tel int
declare @sp_dir varchar(50)
declare @sp_rfc char(13)

select @sp_nombre=nombre,@sp_tel=telefono,@sp_dir=direccion from cat_cliente where rfc = @rfc

while(@cont < 4)
Begin
    if( @sp_nombre <> @nombre)
        Begin
            update cat_cliente set nombre = @nombre 
        End
    else
        Begin
            set @cont += 1
        End 
    if(@sp_tel <> @tel)
        Begin
            update cat_cliente set telefono = @tel
        End
    else
        Begin
            set @cont += 1
        End
    if(@sp_dir <> @dir)
        Begin
            update cat_cliente set direccion = @dir
        End
    else
        Begin
            set @cont += 1
        End
End

Напишите код С#, как показано ниже

  String query = "SP_PDF";
        SqlCommand cmd = new SqlCommand(query, cnx);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@nombre", SqlDbType.VarChar).Value = Nombre.Text;
        cmd.Parameters.AddWithValue("@tel", SqlDbType.Int).Value = Telefono.Text;
        cmd.Parameters.AddWithValue("@dir", SqlDbType.VarChar).Value = Direccion.Text;
        cmd.Parameters.AddWithValue("@rfc", SqlDbType.Char).Value = RFC.Text;
        try
        {
            cnx.Open();
            cmd.ExecuteNonQuery();
            Response.Write("<script>window.alert('¡Funciono!');</script>");
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cnx.Close();
        }
  • 0
    Ну ... теперь он работает, но он не обновляет информацию, если я ее изменяю. Я думаю, что это моя хранимая процедура, но я не могу ошибиться, она работает на Sql Server, и это то, что не имеет смысла для меня.
  • 0
    Разместите свой код хранимой процедуры
Показать ещё 4 комментария
1

Если вы измените процедуру хранилища, то снова выполните

ALTER Procedure SP_PDF
(@nombre varchar(50), @tel int, @dir varchar(50), @rfc char(13))
as
declare @cont int
set @cont = 0
while(@cont < 4)
Begin
    if((select nombre from cat_cliente where rfc = @rfc) != @nombre)
        Begin
            update cat_cliente set nombre = @nombre 
        End
    else
        Begin
            set @cont += 1
        End 
    if((select telefono from cat_cliente where rfc = @rfc) != @tel)
        Begin
            update cat_cliente set telefono = @tel
        End
    else
        Begin
            set @cont += 1
        End
    if((select direccion from cat_cliente where rfc = @rfc) != @dir)
        Begin
            update cat_cliente set direccion = @dir
        End
    else
        Begin
            set @cont += 1
        End
End

а затем снова выполнить код.

  • 0
    Все тот же D:
  • 0
    Я думаю, что мой код C # выполняет SP, потому что он никогда не получает команду для его выполнения.
1

Измените следующим образом:

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = cnx;
    cmd.Text = "SP_PDF";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@nombre", SqlDbType.VarChar).Value = Nombre.Text;
    cmd.Parameters.AddWithValue("@tel", SqlDbType.Int).Value = Telefono.Text;
    cmd.Parameters.AddWithValue("@dir", SqlDbType.VarChar).Value = Direccion.Text;
    cmd.Parameters.AddWithValue("@rfc", SqlDbType.Char).Value = RFC.Text;

    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataSet set = new DataSet();

    try
    {
        cmd.Connection = cnx;
        cnx.Open();
        cmd.ExecuteNonQuery();
        adp.Fill(set);
        Response.Write("<script>window.alert('¡Funciono!');</script>");
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        cnx.Close();
    }
  • 2
    помочь ОП понять, какие изменения вы сделали и как?
  • 0
    "Не удалось найти хранимую процедуру 'exec SP_PDF'." Это исключение, которое все еще бросают.
0

Как вы заметили, это забавно, что SP работает на сервере sql, а не в С#. B'coz есть некоторая ошибка в вашем коде.

String query = "SP_PDF";
    SqlCommand cmd = new SqlCommand(query, cnx);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@nombre", SqlDbType.VarChar).Value = Nombre.Text;
    cmd.Parameters.AddWithValue("@tel", SqlDbType.Int).Value = Telefono.Text;
    cmd.Parameters.AddWithValue("@dir", SqlDbType.VarChar).Value = Direccion.Text;
    cmd.Parameters.AddWithValue("@rfc", SqlDbType.Char).Value = RFC.Text;

    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataSet set = new DataSet();

    try
    {
        cnx.Open();
        cmd.ExecuteNonQuery();
        adp.Fill(set);
        Response.Write("<script>window.alert('¡Funciono!');</script>");
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        cnx.Close();
    }

ИЛИ

Перейти на этот сайт: - http://www.aspsnippets.com/Articles/Calling-Update-SQL-Server-Stored-Procedures-using-ADO.Net.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню