it-swarm.com.de

String oder Binärdaten würden abgeschnitten werden. Die Anweisung wurde beendet. Beim Hochladen des Profils

Ich versuche, die asp.net-Profilfunktion zum Speichern der Benutzerinformationen zu verwenden. Ich habe ein Bild in den Profileigenschaften.

Ich verwende den von asp.net in Visual Studio angegebenen Standardprofilanbieter.

Hier ist die Definition von Eigenschaften in 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>

Dies ist der Code:

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();
        }
    }

Aber es wird folgende Ausnahme auch für 34KB Datei ausgelöst, die nicht richtig sein kann? Mache ich etwas falsch?

[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

Überprüfen Sie die Datenbankspalte, in die Sie die Daten einfügen möchten. Die für die Daten definierte Länge ist geringer als die, die Sie einfügen möchten.

Wenn Sie beispielsweise versuchen, einen Wert in eine Spalte einzufügen, die als Vorname Varchar (50) definiert ist, und dieser Wert eine Länge von mehr als 50 hat, gibt es dieselbe Ausnahme, die Sie erwähnt haben.

15
DanKodi

Die Lösung des Problems liegt wahrscheinlich in der Struktur Ihres SQL Servers. Ich rate Ihnen, den Typ des Bildfelds in der SQL-Tabelle von binary oder einem beliebigen Feld in image zu ändern.

0
FA LE TI NO