0

我试图从数据库中只选择一个条目。它目前正在返回一个 xml 文档对象,我不知道为什么。至少,这就是我的 javascript 告诉我的。我希望它返回一个字符串,它是 gameRequestUser 的名称,其中 userName="this user"

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

4 回答 4

3

您应该使用ExecuteScalar而不是ExecuteReader

user = (string)getRequest.ExecuteScalar();

甚至在您应该使用 SQL Server Management Studio 检查查询结果之前 - 在那里运行查询并检查结果是否正常。

于 2012-05-26T21:51:28.820 回答
2

始终使用参数,避免太多问题(字符串引用、sql 注入等)

using(SqlConnection conn = new SqlConnection("yourconnectionstring"))
{
    SqlCommand getRequest = new SqlCommand("SELECT gameRequestUser FROM UserData Where " + 
                                           "userName=@user", conn); 
    conn.Open(); 
    getRequest.Parameters.AddWithValue("@user",Session["userName"].ToString()) 
    SqlDataReader reader = getRequest.ExecuteReader(); 
    while (reader.Read()) { 
        user = reader.GetValue(0).ToString().Trim(); 
    } 
}
于 2012-05-26T21:58:17.983 回答
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'

我希望这有帮助!

于 2012-05-26T21:47:04.337 回答
1
  1. 使用 SELECT TOP 1 ... 查询

    SELECT TOP 1 gameRequestUser 从 UserData WHERE ...

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

    SqlCommand getRequest = new SqlCommand(....);
    ...
    字符串用户 = Convert.ToString(cmd.ExecuteScalar());

于 2012-05-26T21:54:36.173 回答