Stored procedures 存储过程不更新数据库

Stored procedures 存储过程不更新数据库,stored-procedures,Stored Procedures,问题: 数据库没有更新,但我不确定它在哪里 我在过去使用过很多,但我不明白为什么这不起作用。如果我能了解如何在存储过程上运行错误测试,我想这会有所帮助 测试: 在.aspx代码中的存储过程请求后,我将变量传递给标签,以检查值是否存在(代码中的左侧) 在存储过程中将int更改为varchar 查询: 如何解决这个问题,然后如何运行测试以在将来发现问题 存储过程: USE [DATABASE] GO /****** Object: StoredProcedure [dbo].[spChangeVa

问题:

数据库没有更新,但我不确定它在哪里

我在过去使用过很多,但我不明白为什么这不起作用。如果我能了解如何在存储过程上运行错误测试,我想这会有所帮助

测试:

在.aspx代码中的存储过程请求后,我将变量传递给标签,以检查值是否存在(代码中的左侧)

在存储过程中将int更改为varchar

查询:

如何解决这个问题,然后如何运行测试以在将来发现问题

存储过程:

USE [DATABASE]
GO
/****** Object:  StoredProcedure [dbo].[spChangeValue]    Script Date: 11/08/2015 12:02:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER PROCEDURE  [dbo].[spRiskRatingChange] 
@ActionID int,
@EmployeeID int,
@NewRating varchar(10)

AS

DECLARE @DateChanged AS nvarchar(max) 
SET @DateChanged = GETDATE()

DECLARE @OldRating AS nvarchar(max)
DECLARE @OldComments AS nvarchar(max)
DECLARE @EmployeeName AS nvarchar(max)

SET @OldRating = 
(
SELECT OverallRiskCategory FROM TblAsbestos WHERE ID = @ActionID 
)

SET @OldComments = 
(
SELECT Comments FROM TblAsbestos WHERE ID = @ActionID 
)

SET @EmployeeName = 
(
SELECT UserFirstName + ' ' + UserSurname FROM SystemUsers  WHERE ID = @EmployeeID  
)

BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
SET NOCOUNT ON;

UPDATE TblAsbestos SET OverallRiskCategory = @NewRating, RiskCategory = @NewRating,  
Comments= ('Rating changed from ' + RTRIM(@OldRating) + ' to ' 
+ RTRIM(@NewRating) + 'By ' + @EmployeeName + ' on ' + @DateChanged + ' -- ' + @OldComments) 
 WHERE ID = @ActionID

END
在.aspx.vb中编写代码

 Dim connection As SqlConnection
            Dim command As New SqlCommand
            Dim ds As New DataSet
            Dim ConnectionString1 As String = System.Configuration.ConfigurationManager.ConnectionStrings("VINCI_SQL").ToString()
            connection = New SqlConnection(ConnectionString1)

            connection.Open()

            With command
                .Connection = connection
                .CommandText = "spRiskRatingChange" 'include audit names
                .CommandType = CommandType.StoredProcedure
                .Parameters.Clear()
                .Parameters.AddWithValue("@ActionID", Session("ActionID").ToString)
                .Parameters.AddWithValue("@EmployeeID", Session.Item("EmployeeID").ToString)
                .Parameters.AddWithValue("@NewRating", ddOverallRiskCategoryEdit.SelectedValue)
                .ExecuteNonQuery()


                lblErrorMessageRatings.Visible = True
                lblErrorMessageRatings.Text = "Action ID: " & Session("ActionID").ToString
                lblErrorMessageRatings.Text = lblErrorMessageRatings.Text & " EmployeeID: " & Session("EmployeeID").ToString
                lblErrorMessageRatings.Text = lblErrorMessageRatings.Text & " NewRating: " & ddOverallRiskCategoryEdit.SelectedValue
阅读以下内容:

而不是

 .Parameters.AddWithValue("@ActionID", Session("ActionID").ToString)
试一试

我假设你传递的是一个int值


.Parameters.AddWithValue执行隐式类型转换,这可能是导致问题的原因

如果直接在sql中运行它会发生什么?我添加了如下值:@ActionID int='11829',@EmployeeID int='143',@NewRating varchar(10)='Test'但数据库中没有更改。在存储过程中使用
@NewRating
的唯一时间是在生成注释时——这是有意的吗?您是否使用了Visual Studio SSDT或SQL Server Management Studio中的存储过程调试器?请尝试在存储过程中硬编码actionID,而不是在代码中硬编码,然后查看它是否正确谢谢,我删除了“(int)”,因为这在它运行之前导致了一个错误。把那部分去掉行吗,行吗?!哦,是的,对不起,我把我的VB和c混合了-我想这是VBC中的CInt()。谢谢,我以后会记住的!
.Parameters.Add("@ActionId",SqlDbType.Int)
.Parameters("@ActionId").Value = CInt(Session("ActionId"))