简体   繁体   English

存储过程未插入新行

[英]Stored Procedure not Inserting New Row

I have a stored procedure that should be inserting a new row in a table for every row in a form I have on an application, but instead is concatenating the values and storing them into one row in SQL Server. 我有一个存储过程,该存储过程应该以我在应用程序中拥有的表单的形式为表中的每一行插入一个新行,而是将这些值连接起来并存储到SQL Server的一行中。

What's strange is I have ANOTHER stored procedure that does exactly what it's supposed to do, take every row in a form and inserts each row into a SQL Server table as unique rows. 奇怪的是,我有一个ANOTHER存储过程,该存储过程完全可以完成预期的工作,将表单中的每一行作为唯一行插入到SQL Server表中。

For the life of me, I cannot find where/how the two are creating different outputs - both should be performing the same. 对于我的一生,我无法找到两者在何处/如何创建不同的输出-两者应执行相同的操作。

Here is the stored procedure that works. 这是有效的存储过程。

Sub: 子:

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

Stored procedure: 存储过程:

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

And here is the stored procedure that does NOT work. 这是不起作用的存储过程。

Sub: 子:

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

Stored procedure: 存储过程:

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

Again, the working stored procedure creates a new row for each form row on my application. 同样,工作中的存储过程为我的应用程序中的每个表单行创建了一个新行。

The stored procedure that does not work, is concatenating and creating comma-separated values for each form row all in one table row in SQL Server. 无法使用的存储过程正在串联并为SQL Server的一个表行中的每个表格行创建逗号分隔的值。

Simply put, I need the stored procedure that is not working correctly to do EXACTLY the same as the working stored procedure. 简而言之,我需要工作不正常的存储过程才能与工作中的存储过程完全一样。

Any help appreciated! 任何帮助表示赞赏!

It turns out the issue was not with the stored procedure or sub calling the stored procedure. 事实证明,问题不在于存储过程或子调用存储过程。

The issue was the ID tags for the inputs in the table were being duplicated, resulting in the call for that ID to merge all of the cell values in that column together. 问题是表中输入的ID标记被重复,导致要求该ID将该列中的所有单元格值合并在一起。 Weird, I did not realize this was even possible but I do see some use with that approach. 很奇怪,我什至没有意识到这是可能的,但是我确实看到了这种方法的用处。

Nonetheless, scratch this one up as a fat-finger coding error. 尽管如此,还是将这一问题作为胖手指编码错误来解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM