it-roy-ru.com

Строка или двоичные данные будут проигнорированы. Заявление было прекращено. При загрузке профиля

Я пытаюсь использовать функциональность профиля asp.net для хранения информации о пользователе. У меня есть изображение в свойствах профиля.

Я использую провайдер профиля по умолчанию, заданный asp.net в Visual Studio.

Вот определение свойств в web.config

  <properties>
    <add name="FirstName"/>
    <add name="MiddleName"/>
    <add name="LastName"/>
    <add name="ProfileImage" type="System.Byte[]" defaultValue='null'/>
    <add name="MobileNumber"/>
    <add name="TelephoneNumber"/>
  </properties>

Это код:

protected void Button1_Click(object sender, EventArgs e)
        {
            var profile = HttpContext.Current.Profile;
            profile.SetPropertyValue("FirstName", TextBox1.Text);
            profile.SetPropertyValue("LastName",TextBox3.Text);
            profile.SetPropertyValue("MiddleName", TextBox2.Text);
            profile.SetPropertyValue("MobileNumber", TextBox4.Text);
            profile.SetPropertyValue("TelephoneNumber", TextBox5.Text);

        if (IsPostBack)
        {
            Boolean fileok = false;
            String path = Server.MapPath("~/UploadedImages/");
            path = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(path);

            if (FileUpload1.HasFile)
            {
                String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                String[] allowedextensions = { ".gif", ".png", ".jpeg", ".jpg" };
                for (int i = 0; i < allowedextensions.Length; i++)
                {
                    if (fileExtension == allowedextensions[i])
                    {
                        fileok = true;
                    }
                }
            }
            if (fileok)
            {
                byte[] userImage = new byte[1025];

                try
                {
                   userImage = ReadFully(FileUpload1.PostedFile.InputStream);


                }
                catch (Exception ex)
                {
                    //exception while getting the file
                    return;
                }

                profile.SetPropertyValue("ProfileImage", userImage);
            }
            else
            {
              //file not okay type not image
            }
        }


    }
//-------------------------------------------------------------Get The File in Byte Stream ---------------------------------//
    public static byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[input.Length];

        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }

Но это бросает следующее исключение даже для файла 34 КБ, который не может быть правильным? Я делаю что-то неправильно?

[SqlException (0x80131904): String or binary data would be truncated.
The statement has been terminated.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1767866
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5352418
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1691
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +269
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1406
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +205
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +160
   System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) +535
   System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +262

[UpdateException: An error occurred while updating the entries. See the inner exception for details.]
   System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +444
   System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) +146
   System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) +571
   System.Web.Providers.DefaultProfileProvider.SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) +745
   System.Configuration.SettingsBase.SaveCore() +389
   System.Configuration.SettingsBase.Save() +114
   System.Web.Profile.ProfileBase.SaveWithAssert() +31
   System.Web.Profile.ProfileBase.Save() +72
   System.Web.Profile.ProfileModule.OnLeave(Object source, EventArgs eventArgs) +9497686
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
3
user3642625

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

Например, если вы попытаетесь вставить значение в столбец, определенный как Firstname Varchar (50), и это значение будет иметь длину более 50, то это приведет к тому же исключению, которое вы упомянули.

15
DanKodi

Решение проблемы, скорее всего, зависит от структуры вашего SQL Server. Я советую вам изменить тип поля изображения в таблице SQL с binary или любого другого поля на image.

0
FA LE TI NO