2014-05-20 6 views
0

응용 프로그램에있는 양식의 모든 행에 대해 새 행을 삽입해야하는 저장 프로 시저가 있지만 값을 연결하여 SQL의 한 행에 저장하는 저장 프로 시저가 있습니다. 섬기는 사람.저장 프로 시저가 새 행을 삽입하지 않음

이상한 점은 내가하는 일을 정확히 수행하고 양식의 모든 행을 가져 와서 각 행을 SQL Server 테이블에 고유 한 행으로 삽입한다는 점입니다.

나를 기다리는 동안 두 사람이 서로 다른 결과물을 만드는 위치/방법을 찾을 수 없습니다. 둘 다 똑같이 수행되어야합니다.

다음은 작동하는 저장 프로 시저입니다.

하위 :

Private Sub AddHOMEFunds(ByVal HomeID As Integer) 
    clearHOMEFunds(HomeID) 
    Dim i As Integer 
    For i = 0 To Request.Form.Count - 1 
     If InStr(Request.Form.Keys(i), "HOMEprojectName") > 0 Then 
      Dim connProperties As String = Globals.connstring 
      Dim sql As String = "spAddHOMEFunds" 
      Dim objConn As New SqlConnection(connProperties) 
      objConn.Open() 
      Dim cmd As New SqlCommand(sql, objConn) 
      With cmd 
       .CommandType = Data.CommandType.StoredProcedure 
       .Parameters.AddWithValue("@HOMEID", HomeID) 
       .Parameters.AddWithValue("@HOMEprojectName", Request.Form.Item(i)) 
       .Parameters.AddWithValue("@HOMEfiscalYear", Request.Form.Item(i + 1)) 
       .Parameters.AddWithValue("@HOMEfundingReceived", Request.Form.Item(i + 2)) 
       .Parameters.AddWithValue("@HOMEunitsDeveloped", Request.Form.Item(i + 3)) 
       .Parameters.AddWithValue("@HOMEremainingFunds", Request.Form.Item(i + 4)) 
       .Parameters.AddWithValue("@HOMEfinalDraw", Request.Form.Item(i + 5)) 
      End With 
      cmd.ExecuteNonQuery() 
      objConn.Close() 
     End If 
    Next 
End Sub 

저장 프로 시저 : 여기

USE [DB] 
GO 
/****** Object: StoredProcedure [dbo].[spAddHOMEFunds] Script Date: 05/20/2014 11:25:53 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spAddHOMEFunds] 
      @HOMEID int 
      ,@HOMEprojectName varchar(max) 
      ,@HOMEfiscalYear varchar(max) 
      ,@HOMEfundingReceived varchar(max) 
      ,@HOMEunitsDeveloped varchar(max) 
      ,@HOMEremainingFunds varchar(max) 
      ,@HOMEfinalDraw varchar(max) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT INTO [dbo].[HOMEFunds] 
      ([HOMEID] 
      ,[HOMEprojectName] 
      ,[HOMEfiscalYear] 
      ,[HOMEfundingReceived] 
      ,[HOMEunitsDeveloped] 
      ,[HOMEremainingFunds] 
      ,[HOMEfinalDraw]) 
    VALUES 
      (@HOMEID 
      ,@HOMEprojectName 
      ,@HOMEfiscalYear 
      ,@HOMEfundingReceived 
      ,@HOMEunitsDeveloped 
      ,@HOMEremainingFunds 
      ,@HOMEfinalDraw) 

END 

그리고 작동하지 않는 저장 프로 시저입니다.

하위 :

Private Sub AddHOMEFundsReceived(ByVal HomeID As Integer) 
    clearHOMEFundsReceived(HomeID) 
    Dim i As Integer 
    For i = 0 To Request.Form.Count - 1 
     If InStr(Request.Form.Keys(i), "FundsReceivedProjectName") > 0 Then 
      Dim connProperties As String = Globals.connstring 
      Dim sql As String = "spAddHOMEFundsReceived" 
      Dim objConn As New SqlConnection(connProperties) 
      objConn.Open() 
      Dim cmd As New SqlCommand(sql, objConn) 
      With cmd 
       .CommandType = Data.CommandType.StoredProcedure 
       .Parameters.AddWithValue("@HOMEID", HomeID) 
       .Parameters.AddWithValue("@FundsReceivedProjectName", Request.Form.Item(i)) 
       .Parameters.AddWithValue("@FundsReceivedYearReceived", Request.Form.Item(i + 1)) 
       .Parameters.AddWithValue("@FundsReceivedSource", Request.Form.Item(i + 2)) 
       .Parameters.AddWithValue("@FundsReceivedAmount", Request.Form.Item(i + 3)) 
       .Parameters.AddWithValue("@FundsReceivedOutcome", Request.Form.Item(i + 4)) 
       .Parameters.AddWithValue("@FundsReceivedFundsRemaining", Request.Form.Item(i + 5)) 
       .Parameters.AddWithValue("@FundsReceivedPercentRemaining", Request.Form.Item(i + 6)) 
      End With 
      cmd.ExecuteNonQuery() 
      objConn.Close() 
     End If 
    Next 
End Sub 

저장 프로 시저 :

USE [DB] 
GO 
/****** Object: StoredProcedure [dbo].[spAddHOMEFundsReceived] Script Date: 05/20/2014 10:44:19 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spAddHOMEFundsReceived] 
      @HOMEID int 
      ,@FundsReceivedProjectName varchar(max) 
      ,@FundsReceivedYearReceived varchar(max) 
      ,@FundsReceivedSource varchar(max) 
      ,@FundsReceivedAmount varchar(max) 
      ,@FundsReceivedOutcome varchar(max) 
      ,@FundsReceivedFundsRemaining varchar(max) 
      ,@FundsReceivedPercentRemaining varchar(max) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT INTO [dbo].[HOMEFundsReceived] 
      ([HOMEID] 
      ,[FundsReceivedProjectName] 
      ,[FundsReceivedYearReceived] 
      ,[FundsReceivedSource] 
      ,[FundsReceivedAmount] 
      ,[FundsReceivedOutcome] 
      ,[FundsReceivedFundsRemaining] 
      ,[FundsReceivedPercentRemaining]) 
    VALUES (@HOMEID 
      ,@FundsReceivedProjectName 
      ,@FundsReceivedYearReceived 
      ,@FundsReceivedSource 
      ,@FundsReceivedAmount 
      ,@FundsReceivedOutcome 
      ,@FundsReceivedFundsRemaining 
      ,@FundsReceivedPercentRemaining) 
END 

가 다시 작업 저장 프로 시저 내 응용 프로그램의 각 폼 행에 대해 새 행을 만듭니다.

저장 프로 시저가 작동하지 않는 경우 SQL Server의 테이블 행 하나에서 각 양식 행에 대해 쉼표로 구분 된 값을 모두 연결하여 만듭니다.

간단히 말해, 제대로 작동하지 않는 저장 프로 시저가 올바르게 작동하는 저장 프로 시저와 동일해야합니다.

도움을 주셨습니다.

+1

즉각적인 잘못으로 저에게 뛰어 드는 것은 없습니다. 서버 측 코드를 디버깅하고 ExecuteNonQuery가 실행되는시기와 매개 변수 값을 정확히 확인하고 데이터베이스에서 프로필을 사용하여 어떤 쿼리를 보내고 있는지 확인하는 것이 좋습니다. – GarethD

답변

0

저장 프로 시저 또는 저장 프로 시저를 호출하는 하위에서 문제가 발생하지 않았습니다.

테이블의 입력에 대한 ID 태그가 중복되어 해당 ID가 해당 열의 모든 셀 값을 병합하도록 요청하는 문제가있었습니다. 이상한, 나는 이것이 가능하다는 것을 깨닫지 못했지만 그 접근법을 사용하는 것을 보았다.

그럼에도 불구하고 fat-finger 코딩 오류로이 코드를 긁으십시오.

관련 문제