Я действительно не знаю, что делать. Не могли бы вы мне помочь?
То, что я пытаюсь сделать, заключается в том, что, когда человек наблюдает за изменением своих данных, показанных на экране, взятых из базы данных, когда они заканчивают модификацию, они нажимают кнопку и что там, где хранимая процедура приходит, проверяет, были ли данные изменены, обновляется но если он не изменен... ну, он не изменяет базу данных, но когда я запускаю 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();
}
Попробуйте это Изменить ваш 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();
}
Если вы измените процедуру хранилища, то снова выполните
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
а затем снова выполнить код.
Измените следующим образом:
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();
}
Как вы заметили, это забавно, что 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