2014-03-27 18 views
1

这是在烦我。一些非常简单的东西,它不起作用。我可能做错了什么?如何使用C#从SQL Server获取电子邮件

这里是我使用的代码...

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”的值。换句话说,它是空的,没有任何东西或空值(不能告诉输出窗口显示数组)。我已经直接在SQL服务器上运行了,并且我的电子邮件显示正常。数据库字段中的'@'字符是否会导致某些内容?

我期待的电子邮件是'[email protected]',这对我来说看起来很好。

UPDATE

我更换了ContactEmail场以上,从数据库中另一列名和它回来的罚款。不知道为什么电子邮件是一个问题。这里的数据类型是VARCHAR(50)

UPDATE

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

谢谢

+0

提示!在执行之前调试cmd2并查看CommandText的值。尝试在数据库中运行该查询字符串。 – voddy

+0

@voddy没有什么不寻常的。显示的SQL与上面相同。 – Fandango68

+0

雅怪。尝试选择*并查看电子邮件地址是否返回。 – voddy

回答

2

解决了!

出于某种原因(我在C#中的电子邮件对象时是noob),但是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 = "[email protected]"; //this is as a default in case the sql above does not return a value 
    while (rdr.Read()) 
    { 
    fldEmail = rdr.GetSqlValue(0).ToString(); 
    } 
} 

我避免SQLReader的最初是因为我认为他们特别是在数据的多行读取时的设计。在我的情况下,我知道给定的参数只返回一行或根本没有。

谢谢

1

在第一次更改选择性能原因1。

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

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

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

此外,您可以检查您的连接字符串,以确保您连接到正确的数据库。

+0

谢谢,但我做到了。实际上,我将ContactEmail更改为其他一列(如另一个文本字段,例如StudentName),并且看到学生姓名又回来了。看来,我相信如果电子邮件包含'@'字符(在我的情况下,我也有完整的中止电子邮件 - 即:[email protected]),它与asp或其他东西。但是你对于TOP 1是正确的。我也补充说。再次同样的问题。我期望的电子邮件值是“[email protected]”。那封电子邮件对我来说很好。 – Fandango68

相关问题