asp.net数据库只返回一个值而不是整个集合

时间:2013-12-08 20:10:37

标签: mysql asp.net database

我正在尝试从我的数据库中获取有关特定用户的信息:

 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),我知道我可以为每个字段编写单独的查询,但我认为这不会真正有效。

有没有用一个查询获取这些数据?

2 个答案:

答案 0 :(得分: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 
     }
 }

而是在调用Read方法之后,ExecuteReader在第一行(如果有的话)上移动,然后读取器的每一列都可以作为索引数组使用。 (在应用任何转换之前,请注意空值,如ToString())

顺便说一下,你的标签是MySql,但你在名称空间SqlClient中使用了Sql Server类?

答案 1 :(得分:0)

原因是因为您只执行查询而ExecuteScalar返回数据库的第一行。

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

您可以尝试使用 ExecuteReader ,而不是这样:

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

MSDN说ExecuteScalar method

  

执行查询,并返回第一行的第一列   查询返回的结果集。其他列或行是   忽略。