У меня есть функция 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
Первый шаг : Убедитесь, что user_id, с которым вы нацеливаетесь, из вашего кода существует. – StarPilot
сначала попробуйте открыть соединение, а затем создайте команду. –
Готово. У меня есть отдельная функция, которая работает на page_load, вызывая хранимую процедуру, которая вытаскивает user_id на основе session_id, а затем заполняет скрытое текстовое поле (id = userloggedin) с помощью user_id. У меня есть еще одна функция, которая работает с использованием userloggedin.Text и работает без каких-либо проблем, поэтому я уверен, что это не проблема. – StateofDK