2013-07-08 52 views
2

我有一個允許用戶報告事物的表單。我試圖使用asp和一個SQL存儲過程來運行它,但我無法讓它工作!使用存儲過程不工作的INSERT查詢

任何幫助非常感謝!

這是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 
+3

「*我無法讓它工作*」對我們沒有多大幫助。怎麼了?有錯誤嗎? –

+5

與您的問題沒有關係,但將出生日期存儲爲varchar而非日期是個不錯的主意。 –

+0

感謝您的意見,沒有錯誤或任何東西!只是沒有插入表中的值:( – neeko

回答

0

我討厭用答案的空間,但我不能在帖子尚未置評。我想首先重複Dan Bracuk關於日期數據類型的評論。這種事情給了我更多不必要的悲傷。

另外,我想推薦你使用SQL Profiler。這是你在這些情況下最好的朋友。從SSMS啓動Profiler,在您的跟蹤設置中,按數據庫名稱進行篩選,甚至通過登錄名或用戶進行篩選,以便您可以將顯示內容減少到只有您/您的應用程序與指定數據庫之間的交互。

運行您的應用程序並嘗試插入。在Profiler中查看結果。它會顯示您傳遞的信息,以便您可以查看數據類型不匹配或存儲過程正在使用的值是否存在其他問題。

如果什麼都沒有顯示出來,您至少會知道應用程序根本沒有打到SQL Server。但是,它看起來像它可能正在連接,但存在導致插入失敗的值的問題。如果確實在跟蹤中獲得結果,請選擇執行SP的結果行,並複製該結果的主體。然後,將其粘貼到SSMS中的「新建查詢」窗口中,並查看手動運行時收到的消息。

我希望這可以幫助你。我知道Profiler把我從困境中解救出來的次數超過了我的數量。祝你好運。

-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文件?如果你沒有,那麼你將會得到錯誤,因爲命令將被無法識別,但只是把它扔到那裏。

+0

哦,是的,謝謝你改變了,但仍然沒有改變:/ – neeko