方法返回一个不在表中的值

时间:2012-08-17 13:04:35

标签: c# methods return-value

此方法采用输入参数(电子邮件地址)。如果它存在于表中,则它返回值(email),如果不存在,则它不应返回任何值,但此方法始终保持返回相同的值(参数)。

我错过了什么吗?

private static string findEmailSubscription(string emailAddress)
    {
        try
        {
            //Fetch email Address
            using (DataAccess data = new DataAccess("Email"))
            {
                DynamicEntity[] emails = data.Adapter.Execute(
                    "SELECT EmailAddress FROM table " +
                    "WHERE EmailAddress=@EmailAddress; ",
                    ExecuteCommandType.Text,
                    new Object[,] {
                    {"EmailAddress", emailAddress ?? (object)DBNull.Value}
                });
            }

            return emailAddress;
        }

4 个答案:

答案 0 :(得分:4)

看看你的代码:

return emailAddress;

这是无条件的。您根本不是使用您的emails变量。你是如何期待这个工作的? (并不是说这可能是您的完整代码,因为您有try块没有catchfinally ...)

请注意,具有返回类型的方法不能“不返回任何值”。它永远不会返回(不好),抛出异常或返回值。这就是它所能做的一切。它可以返回一个空引用...是你想要它做什么?

答案 1 :(得分:1)

您将返回与参数传递的值相同的值。

findEmailSubscription(string emailAddress)
(..)
return emailAddress;

你应该做

return emails ;

答案 2 :(得分:0)

您始终返回emailAddress。您在方法体中执行的操作不会以任何方式更改retun值。如果要根据查询返回的内容返回内容,则需要检查查询结果并从那里构造返回值(如果找到则返回电子邮件地址,否则返回null)。

如果您想要原始结果集,您可以随时返回emails

答案 3 :(得分:0)

感谢Jon给了我极好的提示。我重新编写了可行的方法:

public string previousEmail   //Global variable - gets value from other source

public string FindEmailSubscription()
{
   try
   {
      string email = null;

      using (DataAccess data = new DataAccess())
      {            
          data.Execute(
               "SELECT EmailAddress FROM table " +
                "WHERE EmailAddress=@EmailAddress; ",
                new SqlParameter("@EmailAddress", previousEmail));

          if (data.Read())
              email = data.GetValue<string>(0);
      }
      return email;
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex);
   }
}