2

我有一个允许用户报告事情的表格。我正在尝试使用 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
4

2 回答 2

0

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

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

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

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

我希望这可以帮助你。我知道 Profiler 将我从危机中拯救出来的次数比我想象的还要多。祝你好运。

于 2013-07-08T19:54:27.730 回答
-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 文件?如果你没有,你会得到错误,因为命令将无法识别,但只是把它扔在那里。

于 2013-07-08T21:26:51.940 回答