2015-07-21 2 views
0

Я пытаюсь выполнить хранимую процедуру в своей базе данных Sql Server из проекта MVC Asp.Net. Я установил его таким образом, чтобы использовать его для тестирования, поэтому переменная «procedureTest» является постоянным значением (я знаю, что «2044» - это существующая запись в моей базе данных). Я изменю это, как только добьюсь успеха. Кроме того, я знаю, что моя хранимая процедура работает, потому что я успешно ее выполнил в Sql Server Management Studio. Процедура имеет задачу добавления идентификатора из одной таблицы в другую, но я еще не видел, чтобы она отображалась в этой таблице. Я не получаю ошибку в моем блоке catch, поэтому в настоящий момент я теряюсь. Я определенно мог бы воспользоваться вашей помощью.Sql Server Хранимая процедура не выполняется из MVC

try 
{ 
    using (var connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 

     int procedureTest = 2044; 

     var command = new SqlCommand("SELECT ID FROM Images WHERE ID = @id", connection); 
     var paramDate = new SqlParameter("@id", procedureTest); 
     command.Parameters.Add(paramDate); 
     var reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      var storedProcCommand = new SqlCommand("EXEC addToNotificationTable @ID", connection); 
      var paramId = new SqlParameter("@ID", reader.GetInt32(0)); 
      storedProcCommand.Parameters.Add(paramId); 
      command.ExecuteNonQuery(); 
     } 
    } 
} 
catch (Exception e) 
{ 
    string exceptionCause = String.Format("An error occurred: '{0}'", e); 
    System.IO.File.WriteAllText(@"C:\Users\Nathan\Documents\Visual Studio 2013\Projects\MVCImageUpload\uploads\exception.txt", exceptionCause); 
} 

хранимых процедур:

CREATE PROCEDURE addToNotificationTable @ID int 
AS 
Insert NotificationTable (ID) 
SELECT ID 
FROM Images 
Where ID = @ID 
+0

Вы не имеете '' 'в конце вашей команды' SELECT' ... – Ben

+0

1. Отправьте хранимую процедуру. 2. Если вы нажмете F12 и перейдите на вкладку сети, вы видите ожидаемые данные, которые будут переданы в ваш контроллер, как ожидалось? Как вы это называете? 3. Используйте SQL Profiler для мониторинга базы данных и обеспечения вызывания хранимой процедуры. Существует много уровней проблем, которые могут возникнуть в этом коде, прежде чем он даже попадет в базу данных. –

+0

@ Nick.McDermaid, только что добавил процедуру. Первоначально я использовал его в таймере, который был инициализирован в Global.asax.cs, но не был уверен, что это был таймер или этот код, который заставлял его не работать, поэтому я решил назвать его результатом действия, которое получает данные из другое приложение, а затем добавляет данные в мою базу данных. Я просто добавил его в конец моего действия, потому что я знаю, что actionresult работает отлично. Это была быстрая попытка только увидеть, смогу ли я заставить ее работать, а затем оттуда. Я попробую № 2 и № 3, которые вы указали. – Vigs

ответ

0

Изменить Вам код, как этот

while (reader.Read()) 
     { 
      var storedProcCommand = new SqlCommand("EXEC addToNotificationTable @ID", connection); 
      var paramId = new SqlParameter("@ID", reader.GetInt32(0)); 
      storedProcCommand.Parameters.Add(paramId); 
      storedProcCommand.ExecuteNonQuery(); 
     } 
0

Прежде всего, вы пропустили указать тип команды. Также использование EXEC в SqlCommand не является правильным способом.

Пожалуйста, попробуйте код ниже

while (reader.Read()) 
     { 
      using(SqlCommand storedProcCommand = new SqlCommand("addToNotificationTable", connection)) //Specify only the SP name 
      { 
       storedProcCommand.CommandType = CommandType.StoredProcedure; //Indicates that Command to be executed is a stored procedure no a query 
       var paramId = new SqlParameter("@ID", reader.GetInt32(0)); 
       storedProcCommand.Parameters.Add(paramId); 
       storedProcCommand.ExecuteNonQuery() 
      } 
     } 

Поскольку вы вызываете зр внутри while петли перенесите код в using() { } автоматически отчуждать объект команды после каждой итерации

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