2012-05-26 75 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(); 
    } 
}