INSERT查询使用存储过程无法正常工作

时间:2013-07-08 16:26:39

标签: sql-server tsql asp-classic vbscript

我有一个允许用户报告内容的表单。我正在尝试使用asp和SQL存储过程来运行它,但是我无法让它工作!

非常感谢任何帮助!

这是asp / vb:

Dim insertVictim__firstName
insertVictim__firstName = null
if(Request.form("firstName") <> "") then insertVictim__firstName = Request.form("firstName")

Dim insertVictim__surName
insertVictim__surName = null
if(Request.form("surName") <> "") then insertVictim__surName = Request.form("surName")

Dim insertVictim__Gender
insertVictim__Gender = null
if(Request.form("Gender") <> "") then insertVictim__Gender = Request.form("Gender")

Dim insertVictim__DOB
insertVictim__DOB = null
if(Request.form("DOB") <> "") then insertVictim__DOB = Request.form("DOB")

set insertVictim = Server.CreateObject("ADODB.Command")
insertVictim.ActiveConnection = MM_SecurityReporting_STRING
insertVictim.CommandText = "dbo.sp_insertIntoVictim"
insertVictim.Parameters.Append insertVictim.CreateParameter("@firstName", 200, 1,20,insertIncident__firstName)
insertVictim.Parameters.Append insertVictim.CreateParameter("@surName", 200, 1,20,insertIncident__surName)
insertVictim.Parameters.Append insertVictim.CreateParameter("@Gender", 200, 1,20,insertIncident__Gender)
insertVictim.Parameters.Append insertVictim.CreateParameter("@DOB", 200, 1,20,insertIncident__DOB)
insertVictim.CommandType = 4
insertVictim.CommandTimeout = 0
insertVictim.Prepared = true
insertVictim.Execute()

这是SQL存储过程:

USE [SecurityReporting]
GO
/****** Object:  StoredProcedure [dbo].[sp_insertIntoVictim]    Script Date: 07/08/2013 16:59:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_insertIntoVictim]
    -- Add the parameters for the stored procedure here
    @firstName varchar(20),
    @surName varchar(20),
    @Gender varchar(20),
    @DOB varchar(20)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    insert into tbl_victim (firstName, surName, Gender, DOB)
    values (@firstName, @surName, @Gender, @DOB)

END

2 个答案:

答案 0 :(得分:0)

我讨厌使用答案空间,但我还不能对帖子发表评论。我想首先重新讨论Dan Bracuk关于date数据类型的评论。这种事情给了我更多不必要的悲伤。

另外,我想建议你使用SQL Profiler。在这些情况下,这是你最好的朋友。从SSMS启动Profiler,在您的跟踪设置中,按数据库名称进行过滤,甚至通过登录或用户进行过滤,这样您就可以减少显示的内容,只显示您/您的应用程序与指定数据库之间的交互。

运行您的应用程序并尝试插入。在Profiler中查看结果。它将显示传递的信息,以便您可以查看数据类型是否不匹配或存储过程正在使用的值是否存在其他问题。

如果什么都没有出现,你至少会知道应用程序根本没有点击SQL Server。但是,在我看来,它可能正在连接但是导致插入失败的值存在问题。如果确实在跟踪中获得了结果,请选择执行SP的结果行,并复制该结果的主体。然后,将其粘贴到SSMS中的“新建查询”窗口中,只需检查手动运行时收到的消息。

我希望这可以帮到你。我知道Profiler已经把我从边缘拯救出来的次数超过了我的数量。祝你好运。

答案 1 :(得分:-1)

在上面的代码中,您使用的是以insertVictim__开头的变量。但是,在您传递的参数中,您正在使用insertIncident__

(实施例)

Dim insertVictim__firstName
insertVictim__firstName = null
if(Request.form("firstName") <> "") then insertVictim__firstName = Request.form("firstName")

如果insertVictim__是要传递的实际变量 - 我猜这是因为它引用了表单,你将永远不会得到任何东西,因为它实际上没有传递给程序。

例如:

insertVictim.Parameters.Append insertVictim.CreateParameter("@firstName", 200, 1,20,insertIncident__firstName)

应该是:

insertVictim.Parameters.Append insertVictim.CreateParameter("@firstName", 200, 1,20,insertVictim__firstName)

(或者反之亦然取决于你所说的)

此外 - 您是否包含adovbs.inc文件?如果你没有,你会得到错误,因为命令将无法识别,但只是把它扔出去。