字符串或二进制数据将被截断。\ r \ n语句已终止。 C#

时间:2016-03-17 20:01:12

标签: c# sql-server

我正在尝试向桌面添加电子邮件,但是错误的是电子邮件中的值是“prashhanth@oberonit.com”。我没有看到电子邮件中有任何错误。我添加了其他电子邮件,但不是这个。

列RemovedEmail是varchar(50),null

  

“字符串或二进制数据将被截断。
该语句已被终止。”

 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.
   }

更新

作为@Bradley请求

enter image description 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();

    }

                }
            }

1 个答案:

答案 0 :(得分:5)

此异常通常意味着您的数据库字段没有足够的长度

我建议在调试器中查看此代码,并检查字符串的实际长度是多少。

编辑:

我认为它的额外空格会将sting复制到编辑器并检查并尝试使用.Trim()

email = email.Trim();

如果修剪不起作用,可能是某些不可见的Unicode字符

尝试在代码中添加:

var debugCheck = string.Join("", 
            email.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))))

并将debugCheck的值发送给我,以便我查看。

(这会将电子邮件值转换为十六进制字符串,这将有助于识别可能看起来像空格的额外字符,但它们不是)

更新: 所以你实际上有这个字符串(十六进制)707261736868616E7468406F6265726F6E69742E636F6D200B200B200B200B200B200B200B200B2‌​00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B20‌​0B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B 200B表示Unicode字符' ZERO WIDTH SPACE' (U + 200B)您可以使用

删除它
.Replace("\u200B", "");

删除所有unicode空格字符的更通用代码:

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