C# 为什么会出现错误;指定的字符串不是电子邮件地址所需的格式。”;从SQL Server?

C# 为什么会出现错误;指定的字符串不是电子邮件地址所需的格式。”;从SQL Server?,c#,asp.net,sql-server,asp.net-mvc,tsql,C#,Asp.net,Sql Server,Asp.net Mvc,Tsql,这对我来说是非常神秘的,因为我没有表示这个参数指的是一个电子邮件地址(某种形式)XXX@XXX.XXX). 没有属性、元数据等。我在变量命名中使用了单词email,但除此之外,我不明白SQL Server是如何返回此错误的 HTML: <fieldset class="form-group"> <label for="email-address">Email address</label> <input type="text" class

这对我来说是非常神秘的,因为我没有表示这个参数指的是一个电子邮件地址(某种形式)XXX@XXX.XXX). 没有属性、元数据等。我在变量命名中使用了单词
email
,但除此之外,我不明白SQL Server是如何返回此错误的

HTML:

<fieldset class="form-group">
    <label for="email-address">Email address</label>
    <input type="text" class="form-control" name="eaddr" id="email-address" value="lkassjdkljasdklj@gmail.com">
</fieldset>
        $.ajax({
            ...,
            data: JSON.stringify({
                ...
                Email: $('input[name="eaddr"').val(),
                ...
            }),
            ....
        });
C#:

public Guid? AddPartner ( PartnerInit P )
{
    // returns the id of the partner that was added
    // on error, returns null
    Guid? pid = null;
    // Insert partner to database
    using (SqlCommand cmd = new SqlCommand("AddPartner", this._Conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@first_name", P.FirstName);
        cmd.Parameters.AddWithValue("@last_name", P.LastName);
        cmd.Parameters.AddWithValue("@org_name", P.OrgName);
        cmd.Parameters.AddWithValue("@email", P.Email);
        cmd.Parameters.AddWithValue("@region_id", P.RegionId);
        SqlParameter output = new SqlParameter("@new_guid", SqlDbType.UniqueIdentifier) {  Direction = ParameterDirection.Output };
        cmd.Parameters.Add(output);
        this._Conn.Open();
        cmd.ExecuteNonQuery();
        pid = (Guid?)output.Value;
        this._Conn.Close();
    }
CREATE PROCEDURE AddPartner (@first_name NVARCHAR(50),
                             @last_name NVARCHAR(50),
                             @org_name NVARCHAR(50),
                             @email NVARCHAR(254),
                             @region_id INT,
                             @new_guid UNIQUEIDENTIFIER OUTPUT)
AS
BEGIN
      DECLARE @T TABLE ( OutputGuid UNIQUEIDENTIFIER )

      INSERT INTO Partners (first_name, last_name, org_name, email, region_id)
      OUTPUT INSERTED.id INTO @T
      VALUES (@first_name, @last_name, @org_name, @email, @region_id)

      SELECT @new_guid = OutputGUID FROM @T
  END 
GO
T-SQL:

public Guid? AddPartner ( PartnerInit P )
{
    // returns the id of the partner that was added
    // on error, returns null
    Guid? pid = null;
    // Insert partner to database
    using (SqlCommand cmd = new SqlCommand("AddPartner", this._Conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@first_name", P.FirstName);
        cmd.Parameters.AddWithValue("@last_name", P.LastName);
        cmd.Parameters.AddWithValue("@org_name", P.OrgName);
        cmd.Parameters.AddWithValue("@email", P.Email);
        cmd.Parameters.AddWithValue("@region_id", P.RegionId);
        SqlParameter output = new SqlParameter("@new_guid", SqlDbType.UniqueIdentifier) {  Direction = ParameterDirection.Output };
        cmd.Parameters.Add(output);
        this._Conn.Open();
        cmd.ExecuteNonQuery();
        pid = (Guid?)output.Value;
        this._Conn.Close();
    }
CREATE PROCEDURE AddPartner (@first_name NVARCHAR(50),
                             @last_name NVARCHAR(50),
                             @org_name NVARCHAR(50),
                             @email NVARCHAR(254),
                             @region_id INT,
                             @new_guid UNIQUEIDENTIFIER OUTPUT)
AS
BEGIN
      DECLARE @T TABLE ( OutputGuid UNIQUEIDENTIFIER )

      INSERT INTO Partners (first_name, last_name, org_name, email, region_id)
      OUTPUT INSERTED.id INTO @T
      VALUES (@first_name, @last_name, @org_name, @email, @region_id)

      SELECT @new_guid = OutputGUID FROM @T
  END 
GO
这不是一个错误。。。我只是好奇,当我在email字段中输入类似于
“blahblahblah”
的内容时,它是如何返回错误的

指定的字符串不是电子邮件所需的格式 地址


无论何时定义邮件地址无效的
maildaddress
MailMessage
对象,都会发生此错误消息


您的表列似乎没有触发器或任何类型的约束

可能您的表上有一个insert触发器,用于对电子邮件列执行验证。请检查表的定义,特别是触发器和检查约束(列级/表级)是否还可以提供完整的堆栈跟踪?此错误消息可能由.NET邮件组件引发,这是一个有趣的巧合。我真正想问的是,你能确认你是如何确定错误来自SQL Server的吗?毕竟,你是一个自称“不合格”的web开发人员;-)(顺便说一句,名字不错!)您是否对这封电子邮件做了其他事情,比如在插入记录时向它发送电子邮件?这正是尝试将邮件的MailAddress设置为无法识别为电子邮件的字符串时通常会收到的错误。您是否确认这不是web端的验证?例如,直接在SSMS中运行存储过程时是否会收到此消息?