如果我在SQL Server中执行存储过程,一切都按预期工作,但是当我得到Web表单时会出现问题。
除了列Estado
之外,所有内容似乎都在更新,参数Estado
(葡萄牙语中的Status
)是通过检查checkbox1是否被选中获得的,如果是如果不是,变量Estado
将设置为Completado
(已完成)和Pendente
(pending
)。
然后我将参数@Estado
的值赋给变量Estado
的值。
下面您可以看到Button_Click
内部的代码和存储过程。
Dim ConnStr As String = "Data Source=MARTIM-PC\SQLEXPRESS;Initial Catalog=EnotelSuporte;Integrated Security=True"
Dim SqlCommand As New System.Data.SqlClient.SqlCommand
SqlCommand.CommandType = Data.CommandType.StoredProcedure
SqlCommand.CommandText = "Pedido_Update"
SqlCommand.Parameters.Add("@PedidoId", Data.SqlDbType.NVarChar).Value = PedidoID
SqlCommand.Parameters.Add("@Resolucao", Data.SqlDbType.NText).Value = TextBox3.Text
SqlCommand.Parameters.Add("@Observacoes", Data.SqlDbType.NText).Value = TextBox2.Text
If CheckBox1.Checked = True Then
Estado = "Completado"
ElseIf CheckBox1.Checked = False Then
Estado = "Pendente"
End If
SqlCommand.Parameters.Add("@Estado", Data.SqlDbType.NVarChar).Value = Estado
SqlCommand.Parameters.Add("@IdDepartamento", Data.SqlDbType.Int).Value = DropDownList1.SelectedValue
SqlCommand.Parameters.Add("@IdTipoGeral", Data.SqlDbType.Int).Value = DropDownList2.SelectedValue
SqlCommand.Parameters.Add("@IdTipoEspecifico", Data.SqlDbType.Int).Value = DropDownList3.SelectedValue
SqlCommand.Parameters.Add("@IdHotel", Data.SqlDbType.Int).Value = DropDownList4.SelectedValue
SqlCommand.Parameters.Add("@Descricao", Data.SqlDbType.NText).Value = TextBox1.Text
Dim SqlConnection As New System.Data.SqlClient.SqlConnection(ConnStr)
SqlCommand.Connection = SqlConnection
SqlConnection.Open()
SqlCommand.ExecuteNonQuery()
SqlConnection.Close()
根据建议编辑使用局部变量的代码(仍然不起作用):
Dim Estado2 As String = "Pendente"
If CheckBox1.Checked = True Then
Estado2 = "Completado"
End If
SqlCommand.Parameters.Add("@Estado", Data.SqlDbType.NVarChar).Value = Estado2
我也试过这个以消除变量的需要(这也不起作用,开始考虑使用CheckBox1的问题):
If CheckBox1.Checked Then
SqlCommand.Parameters.Add("@Estado", Data.SqlDbType.NVarChar).Value = "Completado"
ElseIf CheckBox1.Checked = False Then
SqlCommand.Parameters.Add("@Estado", Data.SqlDbType.NVarChar).Value = "Pendente"
End If
这是存储过程:
ALTER PROCEDURE [dbo].[Pedido_Update]
@PedidoId int,
@Observacoes ntext,
@IdDepartamento int,
@IdHotel int,
@IdTipoEspecifico int,
@IdTipoGeral int,
@Resolucao ntext,
@Descricao ntext,
@Estado nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
UPDATE Pedidos
SET Resolucao = @Resolucao,
Observacoes = @Observacoes,
IdDepartamento = @IdDepartamento,
IdHotel = @IdHotel,
IdTipoEspecifico = @IdTipoEspecifico,
IdTipoGeral = @IdTipoGeral,
PedidoDescricao = @Descricao,
Estado = @Estado
WHERE
IdPedido = @PedidoId
END
注意到一些有趣的事情。当URL中没有QueryStrings时,CheckBox1.Checked
的值为True
(例如:http://localhost:50851/Gestor/Pedidos/PedidoVisualizar.aspx
)。当QueryStrings(示例:http://localhost:50851/Gestor/Pedidos/PedidoVisualizar.aspx?PedidoId=4
)CheckBox1.Checked
设置为False
时,无论是否选中它。
答案 0 :(得分:0)
代码似乎没问题。但是,如果我理解你正在使用“全局”变量来存储Estado,并且它依赖于webform中的控件,那么您应该考虑这个表单在不同会话中可能会在保存之后更改Estado中的值你的SQL数据。
换句话说,当您为所有打开的会话共享此变量时,您无法相信您获得的值是您的网络表单设置的值。
如果不是这种情况,您可能需要从asp.net应用程序中提供更多信息和一些代码 希望有所帮助