簡體   English   中英

字符串或二進制數據將被截斷。\\ r \\ n該語句已終止。 C#

[英]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的值發送回給我,以便我可以對其進行檢查。

(這會將電子郵件值轉換為十六進制字符串,這將有助於識別可能看起來像空格但不是空格的多余字符)

更新:所以你確實有這個字符串(十六進制) 707261736868616E7468406F6265726F6E69742E636F6D200B200B200B200B200B200B200B200B2‌​00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B20‌​0B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B 200B表示Unicode字符“ZERO WIDTH空間”(U + 200B),你可以通過刪除

.Replace("\u200B", "");

更通用的代碼來刪除所有unicode空格字符:

Regex.Replace(email, @"^[\s,]+|[\s,]+$", "")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM