如何使用c#从SQL Server获取电子邮件

本文关键字:Server 获取 电子邮件 SQL 何使用 | 更新日期: 2023-09-27 17:53:44

这让我很困扰。这么简单的东西却不管用。我能做错什么吗?

这是我使用的代码…

    string strSQL = "SELECT ac.ContactEmail AS fldEmail FROM vwApprenticeshipContactDetails ac WHERE (ac.ApprenticeshipID = @ApprenticeshipID)";
    SqlCommand cmd2 = new SqlCommand(strSQL, cnn);
    cmd2.Parameters.Add("@ApprenticeshipID", SqlDbType.Int).Value = wsAppID;
    Object fldEmail = cmd2.ExecuteScalar();

信不信由你,当我调试并查看'fldEmail'的值时,上面的返回看起来像一个数组。换句话说,它是空的,什么都没有或null(无法判断,因为输出窗口显示的是一个数组)。我已经运行这个直接在SQL服务器,我得到的电子邮件显示良好。数据库字段中的"@"字符会在这里引起一些事情吗?

我期待回复的电子邮件是'g.somebody@domain.com.au',这对我来说看起来不错。

我用数据库中的另一个列名替换了上面的ContactEmail字段,结果很好。不知道为什么电子邮件是个问题。这里的数据类型是VARCHAR(50)

在调试模式下,我注意到它返回system.DBNull数据类型(并深入挖掘它返回空),但为什么?我在SQL服务器中使用正确的参数运行了完全相同的查询,我得到一封电子邮件显示。奇怪的

谢谢

如何使用c#从SQL Server获取电子邮件

解决了!

由于某些原因(当涉及到c#中的电子邮件对象时,我是一个新手),但是ExecuteScalar没有正确填充,因为它没有首先"读取"。我的意思是,当我将ExecuteScalar更改为SqlReader时,它工作了,因为我在测试它之前"强制"读取SQL。

所以我的代码现在看起来像这样,它返回一个电子邮件!

strSQL = @"SELECT TOP 1 ContactEmail FROM vwApprenticeshipContactDetails WHERE ApprenticeshipID = @ApprenticeshipID";
SqlCommand cmd2 = new SqlCommand(strSQL, cnn);
cmd2.Parameters.Add("@ApprenticeshipID", SqlDbType.Int).Value = wsAppID;
using (SqlDataReader rdr = cmd2.ExecuteReader())
{
  string fldEmail = "support@domain.com.au";   //this is as a default in case the sql above does not return a value
  while (rdr.Read())
  {
    fldEmail = rdr.GetSqlValue(0).ToString();
  }
}

我最初避免使用SqlReader,因为我认为它们是专门为读取多行数据而设计的。在我的例子中,我知道给定的参数只返回一行,或者什么也不返回。

谢谢

在第一次更改时,出于性能原因选择top 1。

string strSQL = "SELECT Top 1 ac.ContactEmail AS fldEmail FROM ...

如果你没有任何查询结果,你将得到空值作为结果。

您可以在sql server profiler中查看查询返回的记录数。

你也可以检查你的连接字符串,以确保你连接到正确的数据库。