2015-08-13 119 views
1

問題:存儲過程未更新數據庫

數據庫未更新,但我不確定它丟棄的位置。

我在過去使用過很多,但我看不出爲什麼這不起作用。如果我能看到如何運行存儲過程的錯誤測試,我懷疑這會有所幫助。

測試:

我通過變量的標籤,在.aspx代碼存儲過程請求查詢的值是否存在(左代碼)

變化INT爲varchar在存儲過程之後

查詢:

我該如何解決這個問題,然後我怎麼能運行測試,以找到在未來的問題

小號tored程序:

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 

閱讀項目,如:

UPDATE Stored Procedure not Updating

+0

如果你直接運行它會發生什麼在SQL? – TZHX

+0

我將值添加爲:@ActionID int ='11829',@ EmployeeID int ='143',@ NewRating varchar(10)='Test',但數據庫中沒有更改。 – indofraiser

+0

在你的sproc中唯一一次使用'@ NewRating'的時候是在構建註釋的時候 - 那是故意的嗎? – TZHX

回答

1

而不是

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

嘗試

.Parameters.Add("@ActionId",SqlDbType.Int) 
.Parameters("@ActionId").Value = CInt(Session("ActionId")) 

我假設它是你逝去的

int值

.Parameters.AddWithValue做一個隱式類型轉換,也許這是什麼原因造成您的問題

+0

謝謝,我刪除了'(int)',因爲這在運行之前導致了一個錯誤。是否可以刪除該部分,工作?! – indofraiser

+1

哦,是的,對不起,我正在混合我的VB與C# - 我認爲這是CInt()在VB – jazza1000

+0

謝謝,我會記住,爲未來! – indofraiser