Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串或二进制数据将被截断。\r\n语句已终止。c#_C#_Sql Server - Fatal编程技术网

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

字符串或二进制数据将被截断。\r\n语句已终止。c#,c#,sql-server,C#,Sql Server,我正在尝试将电子邮件添加到表中,但它抛出错误,电子邮件中的值为“prashhanth@oberonit.com". 我在邮件中没有发现任何错误。我添加了其他邮件,但没有添加此邮件 列RemovedEmail为varchar(50),空 “字符串或二进制数据将被截断。语句已终止。” 更新 根据布莱德利的要求 完整代码 protected void btnAdd_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(t

我正在尝试将电子邮件添加到表中,但它抛出错误,电子邮件中的值为“prashhanth@oberonit.com". 我在邮件中没有发现任何错误。我添加了其他邮件,但没有添加此邮件

列RemovedEmail为varchar(50),空

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

更新 根据布莱德利的要求

完整代码

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字段没有足够的长度

我建议在调试器中检查这段代码,并检查字符串的实际长度

编辑:

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

如果trim不起作用,可能是一些不可见的Unicode字符

尝试在代码中添加此项:

var debugCheck = string.Join("", 
            email.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))))
并将debugCheck的值发送回我,以便我可以检查它

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

更新: 所以这个字符串实际上是(十六进制)
707261736868616E7468406F6265726F6E69742E636F6D200B200B200B200B200B200B2‌​00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B20‌​0B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B
200B表示Unicode字符“零宽度空间”(U+200B),您可以使用

.Replace("\u200B", "");
删除所有unicode空白字符的更通用代码:

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

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

我建议在调试器中检查这段代码,并检查字符串的实际长度

编辑:

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

如果trim不起作用,可能是一些不可见的Unicode字符

尝试在代码中添加此项:

var debugCheck = string.Join("", 
            email.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))))
并将debugCheck的值发送回我,以便我可以检查它

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

更新: 所以这个字符串实际上是(十六进制)
707261736868616E7468406F6265726F6E69742E636F6D200B200B200B200B200B200B2‌​00B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B20‌​0B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B200B
200B表示Unicode字符“零宽度空间”(U+200B),您可以使用

.Replace("\u200B", "");
删除所有unicode空白字符的更通用代码:

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


您能告诉我们正在做什么吗?
AddToRemovedEmails
它在问题的底部。
varchar(50)
根据错误,我们知道您正在尝试在列中插入或更新一个值,但您尝试插入/更新的值超过了字段的最大长度(以字节为单位)。如果您的字符集是UTF或其他双宽度集,这意味着varchar(50)字段的最大字符串长度实际上是25。请分享更多的代码,例如表模式和AddToRemovedEmails的主体,我们可能会为您提供帮助。只需运行探查器或启用查询跟踪
intensifyDb.Database.Log=message=>Trace.Write(message)就在AddToRemoveEmails方法之前。看看电子邮件字段里有什么。说UTF是双倍宽度是很容易误导的。无论如何,数据类型是varchar而不是NVARCHAR。请告诉我们您在做什么,它位于问题的底部。
varchar(50)
根据错误,我们知道您正在尝试插入或更新列中的值,但您尝试插入/更新的值超过了最大长度(以字节为单位)字段。如果您的字符集是UTF或其他双倍宽度集,则表示varchar的最大字符串长度(50)字段实际上是25。请共享更多代码,例如表架构和AddToRemovedEmails的正文,我们可能会为您提供帮助。只需运行探查器或启用查询跟踪
intensifyDb.Database.Log=message=>Trace.Write(message);
就在AddToReveEmails方法之前。查看email字段中的内容。说UTF是双倍宽度是非常容易误导的。无论如何,数据类型是varchar而不是nvarchar”prashhanth@oberonit.com"少于50个字符。除非有另一个我们看不到的字段溢出,否则会出现其他问题。@BradleyUffner是的,或者您没有发送“prashhanth@oberonit.com"就像你认为的那样,或者列实际上没有你认为的50宽。我不是OP,所以技术上我什么都没有做。Alexander V.是正确的。你引用的错误只有在插入/更新到字段中的数据超过容量时才会发生。@VinceHorst正确与实际之间存在差距为OP的问题提供有用的答案。”prashhanth@oberonit.com少于50个字符。除非有另一个我们看不到的字段溢出,否则会出现其他问题。@BradleyUffner是的,或者您没有发送prashhanth@oberonit.com"就像你认为的那样,或者列实际上没有你认为的50宽。我不是OP,所以技术上我什么都没有做。Alexander V.是正确的。你引用的错误只有在插入/更新到字段中的数据超过容量时才会发生。@VinceHorst正确与实际之间存在差距为OP的问题提供一个有用的答案。