Umair Nafis Ответов: 3

Как обновить запись в базе данных с помощью entity framework и хранимой процедуры в ASP.NET с#


Код хранимой процедуры:
ALTER PROCEDURE [dbo].[imgupload]
@ProfilePictureName nvarchar(255),
@ProfilePicture varbinary(MAX),
@ProfilePicSize int,
@NewId int
as
begin
update tblUserProfile set ProfilePicture=@ProfilePicture, ProfilePictureName=@ProfilePictureName,ProfilePicSize=@ProfilePicSize where UserSignUpId=@NewId
select 1
end


Загрузка страниц :
if(Request.QueryString["Mode"]=="Updt")
                   {
                       using (dbEntities sc = new dbEntities ())
                       {
                           Int64 userid = Int64.Parse(new StandardModule().Decrypt(HttpUtility.UrlDecode(Request.QueryString["uid"])).ToString());
                           GetUserDetails(Int64.Parse(new StandardModule().Decrypt(HttpUtility.UrlDecode(Request.QueryString["uid"])).ToString()));
                           var query = sc.tblUserProfiles.FirstOrDefault(d => d.UserSignUpId == userid);
                           query.Email = email;
                           query.ProfileName = profilename;
                           query.UserName = username;
                           query.BioData = bio;
                           sc.SaveChanges();
                       }
                   }


Update_Profile Изображение:
<pre> protected void btnUpdateProfile_Click(object sender, EventArgs e)
    {
        HttpPostedFile postedfile = FileUpload1.PostedFile;
        string fileName = Path.GetFileName(postedfile.FileName);
        string fileExtension = Path.GetExtension(fileName);
        int fileSize = postedfile.ContentLength;

        if (fileExtension.ToLower() == ".jpg")
        {
          
            Stream stream = postedfile.InputStream;
            BinaryReader binaryReader = new BinaryReader(stream);
            byte[] bytes = binaryReader.ReadBytes((int)stream.Length);
            string cs = ConfigurationManager.ConnectionStrings["cnstr"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
               SqlCommand cmd = new SqlCommand("imgupload", con);           
                
                cmd.CommandType = CommandType.StoredProcedure;

                SqlParameter paramName = new SqlParameter()
                {
                    ParameterName = "@ProfilePictureName",
                    Value = fileName
                };
                cmd.Parameters.Add(paramName);

                SqlParameter paramSize = new SqlParameter()
                {
                    ParameterName = "@ProfilePicSize",
                    Value = fileSize
                };
                cmd.Parameters.Add(paramSize);

                SqlParameter paramImage = new SqlParameter()
                {
                    ParameterName = "@ProfilePicture",
                    Value = bytes
                };

                cmd.Parameters.Add(paramImage);

                

                SqlParameter paramNewId = new SqlParameter()
                {
                    ParameterName = "@NewId",
                    Value = Int64.Parse(Request.QueryString["uid"])

                };
                cmd.Parameters.Add(paramNewId);

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
                string uid = HttpUtility.UrlEncode(new StandardModule().Encrypt(Session["userid"].ToString()));
                Response.Redirect(string.Format("~/User/UserProfile.aspx?Mode=Updt&uid={0}",uid),false);


            }
        }
    }


Что я уже пробовал:

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

Пожалуйста, помогите мне.

Ошибка находится в строке
SqlParameter paramNewId = new SqlParameter()
               {
                   ParameterName = "@NewId",
                   Value = Int64.Parse(Request.QueryString["uid"])

               };

т. е. входная строка была не в правильном формате.

3 Ответов

Рейтинг:
6

Umair Nafis

Решенный:

Int64 userid = Int64.Parse(new StandardModule().Decrypt(HttpUtility.UrlDecode(Request.QueryString["uid"])).ToString());


я просто расшифровываю идентификатор, который приходит со страницы входа в систему, а затем использую его следующим образом


SqlParameter paramNewId = new SqlParameter()
                {
                    ParameterName = "@NewId",
                    Value = userid
 
                };


и это прекрасно работает.

Спасибо.


Рейтинг:
2

W∴ Balboos, GHB

Я предлагаю вам создать полную строку TSQL и выполнить ее, а не использовать функциональность с различными режимами и тому подобным.

Обновление набора [таблица].... ГДЕ....

Это лучше не только из - за удобочитаемости, но и потому, что эта часть вашей работы теперь легко переносится между языками, если возникнет такая необходимость, и может быть протестирована непосредственно в таких инструментах, как SQL Server Mgmt Studio, чтобы убедиться, что ваш запрос делает то, что вы хотите.

Приведенное выше "обновление", например, будет никогда Вставить новую запись


Рейтинг:
1

Animesh Datta

Привет,
Сообщение об ошибке говорит о том, что вы пытаетесь преобразовать предоставленное значение в целое число, которое определенно не является допустимым целым числом. Итак, проверьте, какое значение исходит из строки запроса.
Поставьте точку останова и отладьте ее.
Спасибо