Процедура SqlException ожидает параметр Error - PullRequest
2 голосов
/ 17 мая 2011

У меня есть простая таблица с тремя полями:

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

Я создал хранимую процедуру для вставки значений в таблицу, которая работает успешно.Тем не менее, в моем try-catch он перехватывает

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 на нем и оказывается, что sproc вызывается дважды.

Эта флеш-форма вызывает определенную страницу, и мне нужно, чтобы кто-нибудь посмотрел на флэш-код и увидел, как он публикуется, поскольку я его не писал.

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Проблема была связана с формой Flash, которая вызывала страницу с процедурами вставки.

Он в основном размещается на странице вставки, а затем перенаправляется туда, в результате чего страница выполняется дважды, и при втором выполнении очевидно не было данных POST для вставки в базу данных, следовательно, SqlException

К вашему сведению - Fiddler очень помог!

1 голос
/ 17 мая 2011

Попробуйте указать параметры явно:

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

Также вы можете попробовать:

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