我想打印用户ID,但在这个地方打印是“System.Data.SqlClient.SqlDataReader”

时间:2014-09-04 10:09:28

标签: c# winforms

打印用户ID但在此处打印

  

System.Data.SqlClient.SqlDataReader

try
{
    con = new SqlConnection(cs.DBConn);
    con.Open();
    String sql = "SELECT SSUserID from SSUserInformation where UserName like '"
        + txtUserName.Text + "%'";
    cmd = new SqlCommand(sql, con);
    rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    frm.lbluserid.Text = Convert.ToString(rdr);

    con.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK
        , MessageBoxIcon.Error);
}

2 个答案:

答案 0 :(得分:3)

Convert.ToString(rdr);返回SqlDataReader的完整类型名称,因为它等同于rdr.GetType().ToString()(备注部分here的最后一句)。

相反,您需要关注:

if(rdr.Read())
    frm.lbluserid.Text = rdr.GetString(0);

但正如Rup在评论中所提到的,如果查询总是返回单个值,您也可以使用ExecuteScalar

frm.lbluserid.Text = Convert.ToString(cmd.ExecuteScalar());

答案 1 :(得分:2)

尝试以下代码: -

while (rdr.Read())
{
     frm.lbluserid.Text = rdr.GetString(0);
}

如此处所述: - http://www.csharp-station.com/Tutorial/AdoDotNet/lesson04

  

如前所述,SqlDataReader通过顺序返回数据   流。要读取此数据,必须逐行从表中提取数据   读取一行后,前一行不再可用。至   再次读取该行,您将不得不创建一个新的实例   SqlDataReader并再次读取数据流。

     

从数据流中读取的典型方法   SqlDataReader将使用while循环遍历每一行。

额外注意: -

我建议您使用Command.ExecuteReader来获取数据库中的值。相反,您应该使用Command.ExecuteScalar,如下所示:

frm.lbluserid.Text = (String) cmd.ExecuteScalar();