2013-12-08 73 views
2

我試圖抓住約從我的分貝特定用戶的信息:asp.net數據庫返回只有一個值,而不是一整套

public string GetUserData() 
    { 
     string conString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 

     using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(conString)) 
     { 

      SqlCommand com = new SqlCommand("SELECT lastName , phoneNo , creditCardNo , dateOfBirth FROM UserExtendedDataSet WHERE UserId = @UserId", con); 

      com.Parameters.Add("@UserId", SqlDbType.NVarChar).Value = getUserId(); 

      con.Open(); 

      string result = Convert.ToString(com.ExecuteScalar()); 
      StatusLabel.Text = result; 
      return result; 
     } 
    } 

的問題是,它僅返回第一個表數據(以這個案例lastName),我知道我可以爲每個字段編寫單獨的查詢,但我認爲這不會很有效。

有無論如何得到這個數據與一個查詢?

回答

3

您需要在該命令上調用ExecuteReader並使用該命令返回的SqlDataReader的實例。 ExecuteScalar只返回第一行的第一列。

using(SqlDataReader reader = com.ExecuteReader()) 
{ 
    if(reader.Read() 
    { 
     StatusLabel.Text = reader[0].ToString() + " " + reader[1].ToString(); 
     .... other labels for other fields 
    } 
} 

而是給ExecuteReader移動的第一行(如果有的話),你調用read方法,然後後該行的每列可從該閱讀器作索引數組。 (在應用像ToString()這樣的任何轉換之前注意空值)

順便說一句,您的標籤說MySql,但您在命名空間SqlClient中使用Sql Server類?

+0

對不起,我的標籤(自動完成)。任何方式非常感謝史蒂夫幫助解決我的問題100%。 +1 – molu2008

0

原因是因爲您只執行查詢而ExecuteScalar從數據庫返回第一行。

string result = Convert.ToString(com.ExecuteScalar()); 

您可以嘗試使用ExecuteReader,而不是像這樣:

using(SqlDataReader reader = com.ExecuteReader()) 
{ 
    if(reader.Read()) 
    { 
     //your code here 
    } 
} 

的MSDN說ExecuteScalar method

執行查詢,並返回第一個的第一列在 行中查詢返回的結果集。其他列或行是 忽略。

相關問題