2012-05-26 107 views
0

我想從數據庫中只選擇一項。它目前正在返回一個XML文檔對象,我無法弄清楚爲什麼。至少,那就是我的javascript告訴我的。我希望它返回一個字符串,它是FO的gameRequestUser其中username =「此用戶」選擇一個條目sql

  try { 
      SqlConnection conn = new SqlConnection(@"Data asdfasdf;database=asdfsdfdf;User id=asdfasdfasdfPassword=asdfasdf;"); 

      SqlCommand getRequest = new SqlCommand("SELECT gameRequestUser FROM UserData Where userName='" + Session["userName"].ToString() + "'", conn); 

      conn.Open(); 

      SqlDataReader reader = getRequest.ExecuteReader(); 

      while (reader.Read()) { 
       user = reader.GetValue(0).ToString().Trim(); 
      } 

      conn.Close(); 

      return user; 
     } catch (Exception e) { return e.Message.ToString(); } 
+0

你能後的「XML文檔」的內容,你認爲你得到? –

+1

您不應公開顯示您的完整連接字符串與IP,用戶名和密碼。 –

+0

至少不是IP? – Rahul

回答

1

有一件事你應該做的是進入SQL Server Management Studio中,並嘗試直接運行查詢有名稱:

SELECT gameRequestUser FROM UserData Where userName='this user' 

話雖這麼說,還有一點要記住的是,你可以告訴SQL通過做這樣的事情還是回到你頂多1行:

SELECT top 1 gameRequestUser FROM UserData Where userName='this user' 

我希望這有助於!

+0

那麼我需要說reader.read()? – Gambai

+0

SqlCommand getRequest = new SqlCommand(「SELECT top 1 gameRequestUser FROM UserData Where userName ='」+ Session [「userName」]。ToString()+「'」,conn); SqlDataReader reader = getRequest.ExecuteReader(); reader.Read(); user = reader.GetValue(0).ToString()。Trim(); – Gambai

3

您應該使用ExecuteScalar而不是ExecuteReader

user = (string)getRequest.ExecuteScalar(); 

即使你應該使用SQL Server Management Studio中檢查查詢結果之前 - 那裏運行查詢和檢查結果確定。

+0

可以,不應該 – Steve

+0

謝謝一堆。那就是訣竅 – Gambai

+0

@Steve爲什麼你認爲'應該'在這裏是一個錯誤的詞? 'ExecuteScalar'就是那種類型的查詢,因此使用'SqlDataReader'的方法好得多# – MarcinJuraszek

1
  1. 使用SELECT TOP 1 ...查詢

    SELECT TOP 1 gameRequestUser FROM的UserData WHERE ...

  2. 使用的SqlCommand的的ExecuteScalar()方法,而不是的ExecuteReader(),因爲你只需要返回一個字段值。

    SqlCommand getRequest = new SqlCommand(....);
    ...
    string user = Convert.ToString(cmd.ExecuteScalar());

2

始終使用參數,避免過多的問題(字符串報價,SQL注入等)

using(SqlConnection conn = new SqlConnection("yourconnectionstring")) 
{ 
    SqlCommand getRequest = new SqlCommand("SELECT gameRequestUser FROM UserData Where " + 
              "[email protected]", conn); 
    conn.Open(); 
    getRequest.Parameters.AddWithValue("@user",Session["userName"].ToString()) 
    SqlDataReader reader = getRequest.ExecuteReader(); 
    while (reader.Read()) { 
     user = reader.GetValue(0).ToString().Trim(); 
    } 
}