2016-06-24 4 views
0

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

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

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 ошибки преобразования.

+4

Возможно, убедитесь, что у вас есть 'set nocount on' в начале вашего SP. – user212514

+1

Совет для отладки: используйте профилировщик sql-сервера и проверьте, что отправлено на экземпляр SQL-сервера. Также посмотрите, что такое возврат (должны иметь строки или другое свойство). Вы также можете захватить точную команду sql и повторно выполнить в студию управления, чтобы узнать, каким был результат. – Igor

+1

Вы использовали 'SQL Profiler' для захвата того, что SQL собирается на сервер? Вы отлаживали свой SP? Может быть полезно увидеть вашу логику внутри вашего SP. Иногда формат даты, отправленный .Net, может не совпадать с форматом даты, ожидаемым сервером БД! – techspider

ответ

0

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

1

Я думаю, что вы пытаетесь добавить SqlParameterSqlCommand, используя так:

SqlCommand cmd = new SqlCommand(); 
cmd.parameter.addwithvalue(@DataDate,DateTime.Now); 
+2

Оператор добавляет параметры в совершенно правильный способ. – Igor

+2

Это правильный способ сделать это, но так же используется подход, используемый в вопросе. Это определенно ** не ** причина для проблем .... –

Смежные вопросы