我真的不知道该怎么办。你能帮我吗?
我想要做的是,当一个人在完成修改后,当他们想要修改从DataBase中获取的屏幕上显示的数据时,他们会点击一个按钮,这就是存储过程检查数据的位置。修改了它的更新,但是如果它没有被修改......那么它不会修改数据库但是当我运行这个项目时它只是不起作用。
有趣的是,存储过程在SQLServer上运行,但在C#中不会。
这是我的代码:
存储过程:
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
C#:
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();
}
答案 0 :(得分: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
编写C#代码如下
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();
}
答案 1 :(得分: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 :(得分: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
然后再次执行代码。
答案 3 :(得分:0)
正如你所提到的那样,有趣的是SP在sql server中运行而不是在c#中运行。 B&#39;因为您的代码中存在一些错误。
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();
}
OR
访问此网站: - http://www.aspsnippets.com/Articles/Calling-Update-SQL-Server-Stored-Procedures-using-ADO.Net.aspx