2012-05-26 5 views
0

Я пытаюсь выбрать только одну запись из базы данных. В настоящее время он возвращает объект документа xml, и я не могу понять, почему. По крайней мере, это то, что мой javascript говорит мне. Я хочу, чтобы вернуть строку, которая является именем Ф.О. в 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, и попробуйте запустить запрос прямо туда:

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 Где 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 ... запрос

    ВЫБРАТЬ TOP 1 gameRequestUser ОТ UserData ГДЕ ...

  2. Используйте SQLCommand в ExecuteScalar() метод вместо ExecuteReader(), так как вы только нужно вернуть одно значение поля.

    SqlCommand getRequest = новый 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(); 
    } 
} 
Смежные вопросы