2015-06-30 3 views
0

У меня есть функция C#, вызывающая хранимую процедуру SQL Server с входными параметрами. Хранимая процедура работает нормально, когда выполняется непосредственно через SQL Server Management Studio, поэтому я считаю, что проблема должна быть на стороне C#, но я не могу понять ее для жизни. Я уже просматривал все предыдущие времена, эта проблема возникла для других, и я не смог найти решение. Если в конечном итоге невозможно определить, что не так, некоторые советы по отладке будут очень оценены, так как я не слишком хорошо разбираюсь в более сложных проблемах.хранимая процедура не обновляет записи

здесь C# функция:

protected void UpdateProfile(object sender, EventArgs e) 
    { 
     string connstring = ConfigurationManager.ConnectionStrings["TimeHubDBCS"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(connstring)) 
     { 
      try 
      { 
       SqlCommand cmd = new SqlCommand("spUpdateProfile", conn); 
       cmd.CommandType = System.Data.CommandType.StoredProcedure; 

       cmd.Parameters.Add("@UserId", SqlDbType.VarChar).Value = userloggedin.Text; 

       cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = first_name.Text; 
       cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = last_name.Text; 
       cmd.Parameters.Add("@MiddleInitial", SqlDbType.VarChar).Value = middle_initial.Text; 
       cmd.Parameters.Add("@Assignment", SqlDbType.VarChar).Value = ddl_assignment.Text; 
       cmd.Parameters.Add("@Rank", SqlDbType.VarChar).Value = rank.Text; 
       cmd.Parameters.Add("@Star", SqlDbType.VarChar).Value = star.Text; 

       cmd.Parameters.Add("@ContactPhone", SqlDbType.VarChar).Value = contact_phone.Text; 
       cmd.Parameters.Add("@PhoneType", SqlDbType.VarChar).Value = phone_type.Text; 
       cmd.Parameters.Add("@Email", SqlDbType.VarChar).Value = email.Text; 
       cmd.Parameters.Add("@Shift", SqlDbType.VarChar).Value = ddl_shift.Text; 

       cmd.Parameters.Add("@ModifyDate", SqlDbType.VarChar).Value = DateTime.Now.ToString(); 
       cmd.Parameters.Add("@ModifiedBy", SqlDbType.VarChar).Value = userloggedin.Text; 
       cmd.Parameters.Add("@StatusId", SqlDbType.VarChar).Value = "active"; 

       conn.Open(); 
       cmd.ExecuteNonQuery(); 

       Response.Write("Profile updated successfully!"); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("Profile update error: " + ex.Message); 
      } 
     } 
    } 

здесь является SQL Server хранимые процедуры:

ALTER PROCEDURE spUpdateProfile 

@UserId   VARCHAR(200) = NULL , 

@FirstName  VARCHAR(200) = NULL , 
@LastName  VARCHAR(200) = NULL , 
@MiddleInitial VARCHAR(200) = NULL , 
@Assignment  VARCHAR(200) = NULL , 
@Rank   VARCHAR(200) = NULL , 
@Star   VARCHAR(200) = NULL , 

@ContactPhone VARCHAR(200) = NULL , 
@PhoneType  VARCHAR(200) = NULL , 
@Email   VARCHAR(200) = NULL , 
@Shift   VARCHAR(200) = NULL , 

@ModifyDate  VARCHAR(200) = NULL , 
@ModifiedBy  VARCHAR(200) = NULL , 
@StatusId  VARCHAR(200) = NULL  

AS 
BEGIN 
UPDATE dbo.users 
    SET 
     first_name   = @FirstName   , 
     last_name   = @LastName   , 
     middle_initial  = @MiddleInitial  , 
     assignment   = @Assignment   , 
     user_rank   = @Rank    , 
     user_star   = @Star    , 
     contact_phone  = @ContactPhone  , 
     phone_type   = @PhoneType   , 
     email    = @Email    , 
     regular_shift  = @Shift    , 
     modify_date   = @ModifyDate   , 
     modified_by   = @ModifiedBy   , 
     status_id   = @StatusId   
    WHERE 
     user_id    = @UserId 
END 
+1

Первый шаг : Убедитесь, что user_id, с которым вы нацеливаетесь, из вашего кода существует. – StarPilot

+0

сначала попробуйте открыть соединение, а затем создайте команду. –

+0

Готово. У меня есть отдельная функция, которая работает на page_load, вызывая хранимую процедуру, которая вытаскивает user_id на основе session_id, а затем заполняет скрытое текстовое поле (id = userloggedin) с помощью user_id. У меня есть еще одна функция, которая работает с использованием userloggedin.Text и работает без каких-либо проблем, поэтому я уверен, что это не проблема. – StateofDK

ответ

0

Partha ответил на вопрос в разделе комментариев под исходным сообщением.

Проблема была в том, что у меня была функция, которая заполняла текстовые поля на странице пользовательскими данными на page_load. Каждый раз, когда запускается функция обновления, страница, отправленная назад на сервер, и событие page_load запускаются снова, повторно заполняя текстовые поля исходными данными, а затем используя эти данные для обновления записи в моей таблице.

Добавление, если (! Page.ispostback) {функция} вокруг функции в случае pag_load решить проблему, только заполнение этих полей, если страница была загружена в первый раз, а не на освежает/постбэков

1

Ваше описание отсутствует ключевой фактор в коде поиска неисправностей. Что такое ошибка? Если вы не можете определить ошибку, вы не можете начать ее устранять.

Положите точку останова на свой улов и попробуйте запустить его. Когда он останавливается в этой точке прерывания, взгляните на исключение и трассировку стека исключений. Обычно это говорит вам, почему вы потерпели неудачу. Кроме того, вы можете поместить точку перерыва в верхнюю часть процедуры, затем наведите указатель мыши на каждую из переменных и посмотрите, все ли они присутствуют. Возможно, отсутствует или имеет неправильный тип данных.