2014-03-27 19 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

相關問題