asr4083 Ответов: 3

Как мне решить эту ошибку-неправильный синтаксис рядом с ' '. В С#


Incorrect syntax near ' '.
Incorrect syntax near ' '.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near ' '.
Incorrect syntax near ' '.

Source Error:
     
Line 24:         SqlDataAdapter sda = new SqlDataAdapter(query, conn);
Line 25: 
Line 26:         sda.Fill(dt);
Line 27:         conn.Close();
Line 28:


Что я уже пробовал:

исходный код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Controls_PeopleYouMayKnow : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PeopleYouMayKnow();
    }
    private void PeopleYouMayKnow()
    {
        DataTable dt = new DataTable();
        string query = "Select * from Userregistration R where RegisterId not in ((select F.FriendId as RegisterId  from Friends f where f.MyId =" + Session["UserId"] + "and f.Status=1) Union  (select F.MyId as RegisterId  from Friends f where f.FriendId =" + Session["UserId"] + "and f.Status=1))and R.RegisterId !=" + Session["UserId"] ;
        // "Select * from Userregistration R where RegisterId not in ((select F.FriendId as RegisterId  from Friends f where f.MyId = '" + Session["UserId"] + "' and f.Status=1) Union  (select F.MyId as RegisterId  from Friends f where f.FriendId = '" + Session["UserId"] + "' and f.Status=1))and R.RegisterId != '" + Session["UserId"]+"'"
       // string query = "Select * from UserRegistration";
        SqlConnection conn = new SqlConnection(@"Data Source=ABHISHEK-PC\ABHISHEK;Initial Catalog=FrirndsZoneDB;Integrated Security=True");
        conn.Open();
        SqlDataAdapter sda = new SqlDataAdapter(query, conn);

        sda.Fill(dt);
        conn.Close();
        
        // dt = Database.GetData(query);
        if (dt.Rows.Count > 0)
        {
             
            ProfileDataList.Visible = true;
            ProfileDataList.DataSource = dt;
            ProfileDataList.DataBind();
        }
        else
        {
 
        }
    }
    protected void ImagePeopleYouMayknow_Click(object sender, ImageClickEventArgs e)
    {
        Session["CurrentProfileId"] = (((ImageButton)sender).CommandArgument).ToString();
        Response.Redirect("Main.aspx");
    }
}

[no name]

Исправьте свой запрос, и ошибка исчезнет. И нет, я даже не собираюсь утруждать себя тем, чтобы смотреть на эту неформатированную атаку SQL-инъекций, ожидающую беспорядка.

asr4083

как я исправил свой запрос, я не понимал...

[no name]

Вы переписываете свой запрос, чтобы ошибка исчезла. Я бы почти поспорил с вами, что если вы используете правильный параметризованный запрос, ваша проблема исчезнет сама собой.

asr4083

спасибо.....

3 Ответов

Рейтинг:
1

Wendelius

Как уже отмечалось, одной из проблем является отсутствие параметров. Это оставляет вас открытым для SQL-инъекций, но также создает потенциальные проблемы преобразования, когда база данных пытается неявно преобразовать текстовые данные в соответствующий тип данных.

Другое дело, что вы не распоряжаетесь объектами, чтобы ресурсы не были освобождены так, как они должны. Лучший способ справиться с этим - использовать блоки.

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

В целом я бы рекомендовал пройти через Правильное выполнение операций с базой данных[^]


Рейтинг:
0

Patrice T

Ваш SQL-запрос подвержен атаке SQL-инъекций. Эта же проблема делает невозможным помочь вам, потому что ваш фактический запрос зависит от значений переменных, используемых для его построения.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]

Сначала устраните проблему инъекции.


Рейтинг:
0

Dave Kreskowiak

Ваша строка вопросов плоха. Вы используете конкатенацию строк, чтобы построить его. Этот метод построения строки запроса не только открывает вам доступ к атакам SQL-инъекций (Google it), но и значительно затрудняет устранение неполадок в вашем коде. Одна из проблем, которая бросается в глаза после просмотра строки запроса в течение 2 секунд, заключается в том, что вы не очень хорошо управляете пробелами. У вас есть параметр, добавляемый в строку, но нет пробела между значением параметра и следующим ключевым словом SQL, например "и ...".

Серьезно, Google для " параметризованных запросов C#", чтобы узнать, как это сделать правильно и сделать его намного проще в отладке.