2015-08-13 4 views
1

Сохраненная процедура не обновляет базу данных

База данных не обновляется, но я не уверен, где она падает.

Я использовал многочисленные в прошлом, но я не понимаю, почему это не работает. Если бы я мог видеть, как запустить проверку ошибок в хранимой процедуре, я подозреваю, что это поможет.

Тесты:

проходят переменные к метке, после запроса хранимой процедуры в коде .aspx, чтобы проверить значения существует (слева в коде)

Изменения Int к VARCHAR в хранимой процедуре

Запрос:

Как это исправить, а затем, как я могу запустить тесты, чтобы найти проблемы в будущем

S 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

единственный раз, когда вы используете '@ NewRating' в своем sproc, когда вы строите комментарий - это намеренно? – 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

Смежные вопросы