2011-05-17 45 views
2

我有一個簡單的表,其具有三個字段:SQLEXCEPTION程序預計參數錯誤

ID (int) 
FormData (xml) 
TimeStamp (DateTime). 

我已經創建了一個存儲過程將值插入被成功地使用的表。然而,在我的嘗試中,它正在捕獲一個

System.Data.SqlClient.SqlException:過程或函數'spInsertApplication'需要參數'@formDataDecoded',它沒有提供。

但是,@ formDataDecoded參數正被插入到數據庫中。

任何想法?我不確定該從哪裏出發?

這裏的存儲過程:

ALTER PROCEDURE [dbo].[spInsertApplication] 
    -- Add the parameters for the stored procedure here 
    @formDataDecoded xml, 
    @timestamp DateTime 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    INSERT INTO Applications (formXML, TimeStamp) VALUES (@formDataDecoded, @timestamp) 
END 

這裏的C#:

string con = ConfigurationManager.AppSettings["umbracoDbDSN"]; 

using (SqlConnection connection = new SqlConnection(con)) 
{ 
    String encodedFormData = HttpUtility.UrlDecode(formData); 

    SqlCommand command = connection.CreateCommand(); 
    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "spInsertApplication"; 
    command.Parameters.AddWithValue("@formDataDecoded", encodedFormData); 
    command.Parameters.AddWithValue("@timestamp", DateTime.Now); 

    try 
    { 
     connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     String errorSql = "INSERT INTO ErrorLog(ErrorText) VALUES (@errorText)"; 
     SqlCommand errorCommand = new SqlCommand(errorSql, connection); 
     errorCommand.Parameters.AddWithValue("@errorText", ex.ToString()); 
     errorCommand.ExecuteNonQuery(); 
     Response.Redirect("/enterprise-superstars/sounds-like-you-are-already-a-star.aspx"); 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

而且我越來越FORMDATA這樣的:

String formData = Request.Form["xmlToVar"]; 

我傳遞給saveApplicationform方法。

在此先感謝。

編輯

運行在它的SQL Server Profiler跟蹤,它原來的存儲過程被調用兩次。

事情是一個Flash窗體調用特定的頁面,我將不得不讓人看看Flash代碼,看看它是如何發佈,因爲我沒有寫它。

+0

你如何填充你的表?使用'SqlDataAdapter'還是什麼?發佈更多C#代碼 – abatishchev 2011-05-17 14:12:11

+0

您可以包含調用代碼嗎? – oleksii 2011-05-17 14:12:28

+0

@abatishchev已添加c#代碼 – gdp 2011-05-17 14:15:22

回答

1

的問題是,由於這是調用其持有的插入程序頁面的Flash表單。

它基本上張貼到插入頁,然後重定向有導致頁面執行兩次,在第二次執行也顯然不是任何POST數據插入到數據庫中,因此SQLEXCEPTION

僅供參考 - 菲德勒幫了很多!

1

嘗試顯式指定參數:

command.Parameters.Add("@formDataDecoded", SqlDbType.Xml).Value = encodedFormData; 
command.Parameters.Add("@timestamp", SqlDbType.DateTime).Value = DateTime.Now; 

你也可以試試:

command.CommandText = "exec dbo.spInsertApplication @formDataDecoded, @timestamp"; 
+0

它仍然會在錯誤日誌中引發異常。不管怎麼說,還是要謝謝你! – gdp 2011-05-17 15:01:54

+0

@geepie:它還是一樣嗎? – abatishchev 2011-05-17 15:30:13

+0

是的。我現在已經解決了。雖然我真的不知道任何閃光燈,但事實證明,閃光燈表單發佈到我的.net頁面,然後重定向到它,顯然是第二次沒有任何後期變量,所以sproc失敗。如果你改變你的答案,我接受它或我可以創建一個答案。 – gdp 2011-05-17 15:34:06

相關問題