2009-08-06 2 views
-1
public static int MassEmpNumUpdate(string empToUpdateFrom, string empToUpdateTo) 
{ 
    string sql; 
    int retval; 
    using (cn = new SqlConnection(ConnectionString())) 
    { 
     cn.Open(); 
     sql = "uspUpdateDet"; // THIS IS THE 1ST SP 
     using (cmd = new SqlCommand(sql, cn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@EmpToUpdateFrom", empToUpdateFrom); 
      cmd.Parameters.AddWithValue("@EmpToUpdateTo", empToUpdateTo); 
      cmd.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
      cmd.ExecuteNonQuery(); 

      retval = (int)cmd.Parameters["@ReturnValue"].Value; 

     } 

     if (retval == 0) 
     { 
      sql = "uspUpdatePrev"; // THIS IS THE 2ND SP - not working :(
      using (cmd = new SqlCommand(sql, cn)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@EmpToUpdateFrom", empToUpdateFrom); 
       cmd.Parameters.AddWithValue("@EmpToUpdateTo", empToUpdateTo); 
       cmd.Parameters.Add("@returnvalue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
       return cmd.ExecuteNonQuery(); 
      } 
     } 

     return retval; 
    } 

} 

}вызова 2-ой метод не работает - asp.net и C#

У меня есть 2 хранимая процедура (которая будет обновлять 2 таблицы) в uspUpdateDet и uspUpdatePrev. Мой вопрос: почему мой второй (uspUpdatePrev) оператор не работает. Кстати СП работает прямо с сервера SQL 08.

SP1:

набор ANSI_NULLS ПО множества QUOTED_IDENTIFIER ON идти

ALTER PROCEDURE [DBO].[UspUpdateDet]

@EmpToUpdateFrom varchar(7) 
, @EmpToUpdateTo varchar(7) 

КАК SET NOCOUNT ON;

DECLARE @affectedRows int SET @affectedRows = 0;

НАЧАТЬ ОБНОВЛЕНИЕ tbl1 SET Det1 = @EmpToUpdateTo ГДЕ Det1 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ UPDATE tbl1 SET DET2 = @EmpToUpdateTo ГДЕ DET2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ UPDATE tbl1SET L1 = @EmpToUpdateTo Где L2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ ОБНОВЛЕНИЕ tbl1 SET L2 = @EmpToUpdateTo Где L2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ UPDATE tbl1 SET L3 = @EmpToUpdateTo Где L3 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ RO WCOUNT КОНЕЦ

НАЧАТЬ UPDATE tbl1 SET L4 = @EmpToUpdateTo ГДЕ L4 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ ОБНОВЛЕНИЕ tbl1 SET L5 = @EmpToUpdateTo ГДЕ L5 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ ОБНОВЛЕНИЕ tbl1 SET L6 = @EmpToUpdateTo ГДЕ L6 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT КОНЕЦ

НАЧАТЬ ОБНОВЛЕНИЕ tbl1 SET L7 = @EmpToUpdateTo ГДЕ L7 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

НАЧАТЬ UPDATE tbl1 SET L8 = @EmpToUpdateTo WHERE L8 = @EmpToUpdateFrom SET @ affectedRows = @affectedRows + @@ ROWCOUNT END

возврата @affectedRows

+0

Вы спрашиваете, почему что-то не работает, не объясняя, какие ожидаемые результаты (что должен делать SP, ...) и каковы фактические результаты (трассировка стека исключений, неправильные данные, ...). Вы можете быть немного более конкретными. –

+1

Вы уверены, что возвращаемое значение из первого сохранено таким образом? Если посмотреть на документацию MSDN, вы можете установить retval равным результату этого ExecuteNonQuery, а не пытаться получить его из коллекции Parameters. –

+0

Что такое сообщение об ошибке _exact_, которое вы получаете при вступлении в выполнение 2-го сохраненного процесса? –

ответ

1

Первое предположение, что ваше заявление, используя в первом блоке закрывает соединение. Какую ошибку вы получаете?

Редактировать: После просмотра this question кажется, что этого не происходит, поэтому лучше всего предположить, что вы вообще не попадаете в блок. Вы уверены, что это происходит?

+0

Я не получаю сообщение об ошибке - это просто сообщение: никаких записей не было обновлено, но есть некоторые записи. – Yves

+0

Если вы профилируете свою базу данных, SP запускается? – Jon

+0

Да, он корректно работает в sql-сервере 08 – Yves

4

Я не знаю, что вы подразумеваете под «нерабочим», но, скорее всего, retval не является 0.

Вы действительно должны отлаживать приложение и видеть, что вы получаете от первого вызова.

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