2015-12-17 6 views
0

Я создал простую веб-страницу asp.net C#, в которой отображается имя пользователя, который вошел в систему, он работает нормально, но проблема в том, когда я ухожу страница открыта, и я обновить его или нажать любую кнопку на ней он дает мне ошибку, и я должен вернуться на страницу входа и снова войдите, чтобы ошибка идти, это сообщение об ошибке:Сведения об исключении: System.Data.SqlClient.SqlException: Неправильный синтаксис около '='

Неверный синтаксис рядом с '='. Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и где оно зарождается в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: Неправильный синтаксис рядом с '='.

Source Error: 

Line 22: 
Line 23:   conn.Open(); 
Line 24:   SqlDataReader DR1 = cmd.ExecuteReader(); 
Line 25:   if (DR1.Read()) 

вот мой код:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
    SqlCommand cmd = new SqlCommand("select * from usersTable where user_id = "+ Session["userIdSession"], conn); 

    conn.Open(); 
    SqlDataReader DR1 = cmd.ExecuteReader(); 
    if (DR1.Read()) 
    { 
     Label1.Text = DR1.GetValue(1).ToString(); 

    } 
    else 
    { 
     conn.Close(); 
    } 
    } 
+0

Каков тип столбца 'user_id'? Каков тип и значение 'Session [" userIdSession "]'? Отлаживайте свой код и рассказывайте нам. Вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. И используйте инструкцию 'using', чтобы распоряжаться своим соединением, командой и читателем. –

+0

[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединять свои SQL-запросы - использовать ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекций –

ответ

1

Prooblem с вашим кодом, что если Session["userIdSession"] является недействительным ваш запрос будет выглядеть следующим образом: -

select * from usersTable where user_id = 

Что, очевидно, недопустимый SQL-запрос. Используйте параметризованный запрос и проверьте, имеет ли значение Session["userIdSession"] перед выполнением.

Вы должны сначала проверить, если Session["userIdSession"] имеет какое-то значение, как это: -

if(Session["userIdSession"] != null) 
{ 
    //execute your code 
} 

Кроме того, использовать параметризованный запрос, чтобы избежать SQL Injection атаки: -

SqlCommand cmd = new SqlCommand("select * from usersTable where user_id = @UserId", conn); 
cmd.Parameters.Add("@UserId",SqlDbType.Int).Value = Convert.ToInt32(Session["userIdSession"]); 

Кроме того, рассмотреть вопрос об использовании using statement автоматически выставлять дорогостоящие объекты, такие как соединения.

Смежные вопросы