String ou des données binaires d'être tronquée. La déclaration a été résilié. Pendant le chargement de profil
Je suis en train d'utiliser l'asp.net Profil de la fonctionnalité de stocker les informations de l'utilisateur. J'ai une image dans les propriétés de profil.
Je suis en utilisant le profil par défaut du fournisseur de données par asp.net dans Visual Studio.
Voici la définition de propriétés dans le 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 est en train de jeter exception suivante, même pour 34KB fichier qui ne peut pas être de droite? Suis-je en train de faire 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
OriginalL'auteur user3642625 | 2014-08-03
Vous devez vous connecter pour publier un commentaire.
Vérifier la colonne de base de données que vous essayez d'insérer les données dans. La longueur définie pour les données est moins que ce que vous voulez insérer.
Par exemple, Si vous essayez d'insérer une valeur dans une colonne définie comme Prenom Varchar(50), et cette valeur a une longueur de plus de 50 alors ce que va donner la même exception que vous avez mentionnés.
Tout d'abord, vous ne devez pas utiliser les données d'image type avec ntext et les types de données texte sera supprimée dans une future version de Microsoft SQL Server. Si vous devez travailler avec elle alors c'est la fin. Le type de données d'image a un données binaires de longueur Variable de 0 à 2^31-1 (de 2 147 483 647) octets. Donc, il a une limite. Depuis que l'erreur vient d'une 34kb fichier qui ne devrait pas être le cas.
Ok. J'ai gagné' utilisation de l'image de type de données. Mais je l'ai fait essayer à une utilisation de type VarBinary(MAX) aussi, mais il a donné la même exception...
Poster votre code pour la mise à jour de la base de données. L'erreur vient de là.
Je ne suis pas le mettre à jour. Comme je l'ai mentionné, je suis l'aide de la fonctionnalité du profil de asp.net... La classe Http.Contexte.Actuel.Profil a sa propre fonction de mise à jour que je n'ai pas altéré. Ce n'est que je n'ai pas surchargé. Suis-je censé faire?
OriginalL'auteur DanKodi
La solution au problème est probablement à partir de la structure de votre Serveur SQL server.
Je vous conseille de modifier le type du champ de l'image dans la table SQL à partir de
binary
ou quel que soit le domaine deimage
.OriginalL'auteur FA LE TI NO