如何使用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#中的电子邮件对象时,我是一个新手),但是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中查看查询返回的记录数。
你也可以检查你的连接字符串,以确保你连接到正确的数据库。