![](/img/trans.png)
[英]How to solve the "String or binary data would be truncated.\r\nThe statement has been terminated." error?
[英]String or binary data would be truncated.\r\nThe statement has been terminated. c#
我正在嘗試將電子郵件添加到表中,但是它引發錯誤,電子郵件中的值為“ prashhanth@oberonit.com”。 我沒有在電子郵件中看到任何錯誤。我添加了其他電子郵件,但不是這樣。
列RemovedEmail為varchar(50),為空
“字符串或二進制數據將被截斷。
該語句已終止。”
var constultantUser = intensifyDb.ConsultantUsers.FirstOrDefault(x => x.Email == email);
// Delete the item
if (constultantUser != null)
{
intensifyDb.DeleteObject(constultantUser);// Save changes
intensifyDb.SaveChanges();
}
if (!intensifyDb.RemovedEmails.Any(x => x.RemovedEmails == email))
{
RemovedEmail consultant = new RemovedEmail
{
RemovedEmails = email
};
intensifyDb.AddToRemovedEmails(consultant);
intensifyDb.SaveChanges(); // Exception throwing here.
}
如@布拉德利的要求
完整代碼
protected void btnAdd_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtEmails.Text))
{
string txt = txtEmails.Text;
string[] lst = txt.Split(new Char[] { '\n', '\r' },
StringSplitOptions.RemoveEmptyEntries);
string email = string.Empty;
var removedEmail = string.Empty;
using (SqlConnection connection = new SqlConnection(connectionString))
{
var foundEmail = string.Empty;
foreach (string emailStr in lst)
{
email = LastCharFromEmailAddress(emailStr).Replace("\r\n", string.Empty);
var intensifyDb = new IntensifyEntities();
var constultantUser = intensifyDb.ConsultantUsers.FirstOrDefault(x => x.Email == email);
// Delete the item
if (constultantUser != null)
{
intensifyDb.DeleteObject(constultantUser);// Save changes
intensifyDb.SaveChanges();
}
if (!intensifyDb.RemovedEmails.Any(x => x.RemovedEmails == email))
{
RemovedEmail consultant = new RemovedEmail
{
RemovedEmails = email
};
intensifyDb.AddToRemovedEmails(consultant);
intensifyDb.SaveChanges();
}
}
connection.Close();
}
}
}
此異常通常表示您的db字段長度不足
我建議在調試器中檢查此代碼,並檢查字符串的實際長度是多少。
編輯:
我認為它的多余空間會將字符串復制到編輯器中,並檢查並嘗試使用.Trim()
email = email.Trim();
如果trim不起作用,可能是一些看不見的Unicode字符
嘗試在代碼中添加:
var debugCheck = string.Join("",
email.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))))
並將debugCheck的值發送回給我,以便我可以對其進行檢查。
(這會將電子郵件值轉換為十六進制字符串,這將有助於識別可能看起來像空格但不是空格的多余字符)
更新:所以你確實有這個字符串(十六進制) 707261736868616E7468406F6265726F6E69742E636F6D200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B
200B表示Unicode字符“ZERO WIDTH空間”(U + 200B),你可以通過刪除
.Replace("\u200B", "");
更通用的代碼來刪除所有unicode空格字符:
Regex.Replace(email, @"^[\s,]+|[\s,]+$", "")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.