Хранимая процедура не возвращает строк с SqlDataAdapter

Я новичок в использовании SqlDataAdpter и пытаюсь выполнить хранимую процедуру. Хранимая процедура выполняется успешно, но строки не возвращаются. Я использовал SQL Server Profiler для мониторинга вызова, и он успешно выполняется (я могу скопировать и выполнить запрос из профилировщика без его изменения и получить результаты).

У меня есть следующее:

public ActionResult Index()
{
    SqlConnection conn = null;
    DataSet results = null;

    try
    {
        string connectionString = // ... my connection
        conn = new SqlConnection(connectionString );
        string query = @"usp_mySP";

        conn.Open();

        SqlDataAdapter sqlAdpt = new SqlDataAdapter(query, conn);
        sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure;

        var dataDate = new SqlParameter { ParameterName = "@DataDate", Value = DateTime.Now };
        var idList = new SqlParameter { ParameterName = "@IDList", Value = "1231,2324,0833" };                 

        sqlAdpt.SelectCommand.Parameters.Add(dataDate);
        sqlAdpt.SelectCommand.Parameters.Add(idList);

        results = new DataSet();
        sqlAdpt.Fill(results);

        sqlAdpt.Dispose();
    }
    catch (SqlException e)
    {               
        throw new Exception("Exception:" + e.Message);
    }
    finally
    {
        if (conn != null)
            conn.Close();
    }

    return View(results);
}

Когда я проверяю DataSet через отладчик, он всегда возвращает 0 строк.

Помогите, пожалуйста, что я делаю не так?

Примечание. Я также пытался (но НЕ предпочитаю) выполнять команду SQL:

EXEC usp_mySP @DataDate, @IDList

и это тоже не сработало, так как я получил ошибки преобразования int в varchar.


person usr4896260    schedule 24.06.2016    source источник
comment
Возможно, убедитесь, что у вас есть set nocount on в начале вашего SP.   -  person user212514    schedule 24.06.2016
comment
Совет по отладке. Используйте профилировщик sql-сервера и проверьте, что отправляется экземпляру sql-сервера. Также посмотрите, что возвращается (должны быть строки или какое-то другое свойство). Вы также можете записать точную команду sql и повторно выполнить ее в студии управления, чтобы увидеть результат.   -  person Igor    schedule 24.06.2016
comment
вы использовали SQL Profiler для захвата того, что SQL собирается на сервер? Вы отлаживали свой SP? Может быть полезно увидеть вашу логику внутри вашего SP. Иногда формат даты, отправленный .Net, может не совпадать с форматом даты, ожидаемым сервером БД!!   -  person techspider    schedule 24.06.2016
comment
Запустите свою программу в режиме отладки и посмотрите, какое значение вы получите для 'connectionString' - судя по внешнему виду вашего кода, строка connectionString = ..., похоже, не имеет никакого установленного значения. Строка не заканчивается символом ';'   -  person SRQ Coder    schedule 24.06.2016
comment
Это был set nocount on. Этого не было. Теперь работает Спасибо!   -  person usr4896260    schedule 24.06.2016


Ответы (2)


Я думаю, вы пытаетесь добавить SqlParameter с помощью SqlCommand следующим образом:

SqlCommand cmd = new SqlCommand();
cmd.parameter.addwithvalue(@DataDate,DateTime.Now);
person Ravi Shah    schedule 24.06.2016
comment
Это правильный способ сделать это, но подход, используемый в вопросе, тоже. Это определенно не причина проблем .... - person marc_s; 24.06.2016

Значит, причина была в set nocount on. Я добавил его в свой sp, и он работает. Спасибо всем за разъяснения.

person usr4896260    schedule 24.06.2016