J'essaie d'utiliser la fonctionnalité de profil asp.net pour stocker les informations de l'utilisateur. J'ai une image dans les propriétés du profil.
J'utilise le fournisseur de profil par défaut indiqué par asp.net dans Visual Studio.
Voici la définition des propriétés dans 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>
C'est le 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();
}
}
Mais il jette exception suivante même pour le fichier de 34Ko qui ne peut pas avoir raison? Est-ce que je fais quelque chose de mal?
[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
Vérifiez la colonne de base de données dans laquelle vous essayez d'insérer les données. La longueur définie pour les données est inférieure à celle que vous essayez d'insérer.
Par exemple, si vous essayez d'insérer une valeur dans une colonne définie par Prénom Varchar (50) et que cette valeur a une longueur supérieure à 50, la même exception que vous avez été signalée.
La solution à ce problème provient probablement de la structure de votre serveur SQL. Je vous conseille de changer le type du champ d'image dans la table SQL de binary
ou de tout autre champ à image
.