2014-09-04 49 views
0

打印用戶ID,但在這個地方印刷是我想打印的用戶ID,但在這個地方印刷是「System.Data.SqlClient.SqlDataReader」

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

您是否期待多行? ExecuteScalar取而代之? – Rup 2014-09-04 10:10:46

回答

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()); 
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();