SqlClient Xml Выходной параметр "не был предоставлен" - PullRequest
1 голос
/ 13 января 2010

Я получаю SqlException при выполнении следующего кода.

"Процедура или функция« usp_Search »ожидает параметр« @pxmlSearchOutput », который не был предоставлен.»

Мои параметры + запрос.

    using (var connection = new SqlConnection(_connectionString))
    {
        using (var command = new SqlCommand("Search.usp_Search", con))
        {

            var pxmlSearchOutput = new SqlParameter();
            pxmlSearchOutput.ParameterName = "@pxmlSearchOutput";
            pxmlSearchOutput.SqlDbType = SqlDbType.Xml;
            pxmlSearchOutput.Direction = ParameterDirection.Output;
            pxmlSearchOutput.Size = 1;
            command.Parameters.Add(pxmlSearchOutput);

            var pxmlSearchInput = new SqlParameter();
            pxmlSearchInput.ParameterName = "@pxmlSearchInput";
            pxmlSearchInput.Value = requestXML;//is valid xml, is a local var
            pxmlSearchInput.SqlDbType = SqlDbType.Xml;
            command.Parameters.Add(pxmlSearchInput);

            var pbitDebug = new SqlParameter();
            pbitDebug.Value = false;
            pbitDebug.ParameterName = "@pbitDebug";
            pbitDebug.SqlDbType = SqlDbType.Bit;
            command.Parameters.Add(pbitDebug);

            var pintErrorNumber = new SqlParameter();
            pintErrorNumber.ParameterName = "@pintErrorNumber";
            pintErrorNumber.SqlDbType = SqlDbType.Int;
            pintErrorNumber.Direction = ParameterDirection.Output;
            command.Parameters.Add(pintErrorNumber);

            connection.Open();
            command.ExecuteScalar();
            connection.Close();
        }
    }

Используя sql profiler, я могу извлечь следующее:

        declare @p3 xml
        set @p3=null
        declare @p4 xml
        set @p4=convert(xml,'***Redacted - This is however, valid xml, which convert works on happily***')
        declare @p6 int
        set @p6=NULL
        exec 
        sp_executesql 
        N'Search.usp_Search',
        N'@pxmlSearchOutput xml output,@pxmlSearchInput xml,@pbitDebug bit,@pintErrorNumber int output',
        @pxmlSearchOutput=@p3 output,
        @pxmlSearchInput=@p4,
        @pbitDebug=0,
        @pintErrorNumber=@p6 output
        select @p3, @p6

Я не могу точно определить, что не так с SQL (и, следовательно, как это связано с кодом .net). Есть идеи?

1 Ответ

2 голосов
/ 13 января 2010

Вы выполняете пакет, запрос типа Текст :

Search.usp_Search

Вы передаете пакет параметров в этот пакет, но все они игнорируются, поскольку они нена самом деле используется в самой партии.У вас есть два варианта:

  • использовать параметры, переданные пакету в самом пакете: var command = new SqlCommand("exec Search.usp_Search @pxmlSearchOutput output, @pxmlSearchInput,@pbitDebug, @pintErrorNumber output", con))
  • Скажите ADO.NEt, что вы делаете вызов RPC, а не просто выполняетепакет: command.CommandType = CommandType.StoredProcedure;

Любое изменение будет работать (но не оба).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...