我正在尝试从数据库中只选择一个条目。它目前正在返回一个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(); }
答案 0 :(得分:3)
您应该使用ExecuteScalar
代替ExecuteReader
:
user = (string)getRequest.ExecuteScalar();
甚至在您使用SQL Server Management Studio检查查询结果之前 - 在那里运行查询并检查结果是否正常。
答案 1 :(得分: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();
}
}
答案 2 :(得分:1)
您应该做的一件事是进入SQL Server Management studio,并尝试直接在那里运行查询:
SELECT gameRequestUser FROM UserData Where userName='this user'
话虽如此,要记住的另一件事是你可以通过做类似的事情告诉SQL最多返回给你一行:
SELECT top 1 gameRequestUser FROM UserData Where userName='this user'
我希望这有帮助!
答案 3 :(得分:1)
使用SELECT TOP 1 ...查询
SELECT TOP 1 gameRequestUser FROM UserData WHERE ...
使用SqlCommand的ExecuteScalar()方法而不是ExecuteReader(),因为您只需要返回一个字段值。
SqlCommand getRequest = new SqlCommand(....);
...
string user = Convert.ToString(cmd.ExecuteScalar());