-1

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

我错过了什么吗?

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

4 回答 4

4

看看你的代码:

return emailAddress;

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

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

于 2012-08-17T13:06:40.010 回答
1

您返回的值与作为 parameter 传递的值相同。

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

你应该做

return emails ;
于 2012-08-17T13:08:20.557 回答
0

您总是返回电子邮件地址。您在方法主体中所做的事情不会以任何方式改变 retun 值。如果您想根据查询返回的内容返回某些内容,您需要检查查询结果并从那里构造一个返回值(即,如果找到则返回电子邮件地址,如果没有则返回 null)。

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

于 2012-08-17T13:14:36.110 回答
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);
   }
}
于 2012-08-31T13:00:05.603 回答