Почему я получаю неправильный синтаксис рядом с ошибкой '='

Я пытался связать ярлык из Datatable

Я получаю эту ошибку

  Incorrect syntax near '='.

на этой линии

 da.Fill(dt);

Мой код: Page_Load

LbLID.Text =this.Page.Request.QueryString["DI"].ToString();

 SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User 
 ID=sa;Password="pass);
 SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID= " + 
 LbLID.Text.Trim(), con);

 System.Data.DataTable dt = new System.Data.DataTable();
 da.Fill(dt);
 lblS1.Text = dt.Rows[0][4].ToString();
 lblS1.DataBind();

4 ответа

Решение

Вы не можете разбить обычные строковые литералы на несколько строк, а также закрывающая кавычка неуместна:

SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User ID=sa;Password=pass");

Или используйте дословный литерал, который можно разбить на несколько строк:

SqlConnection con = new SqlConnection(
    @"Data Source=local;
      Initial Catalog=DB;
      User ID=sa;
      Password=pass");

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

Вот быстрый пример:

using(var con = new SqlConnection(...))
{
    var cmd = new SqlCommand("select * from Table1 where ID = @ID", con);
    con.Open();
    cmd.Parameters.AddWithValue("@ID", LbLID.Text.Trim());
    var da = new SqlDataAdapter(cmd);
    var dt = new DataTable();
    da.Fill(dt);
    lblS1.Text = dt.Rows[0][4].ToString();
    lblS1.DataBind();
}

Некоторые другие советы: вы должны избегать использования select * запросы, так как ваша схема базы данных может измениться, и это нарушит любой существующий код. Было бы лучше выбрать только интересующую вас колонку и сделать простой вызов ExecuteScalar,

Попробуй это:

SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID ='" + 
                        LbLID.Text.Trim() + "'", con);

Однако обратите внимание, что это очень плохой код, который уязвим для внедрения SQL.

Поэтому вы должны попробовать это:

var com = new SqlCommand("SELECT * FROM Table1 WHERE ID=@id", con);
com.Parameters.AddWithValue("id",LBLID.Text.Trim());
var da = new SqlDataAdapter(com);

Или короче:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Table1 WHERE ID=@id", con);
da.SelectCommand.AddWithValue("id",LBLID.Text.Trim());

Это ошибка SQL. Вы не передаете действительный идентификатор.

Это одна из двух вещей.

Вариант A: Ваш идентификатор является строкой. В этом случае.. вам нужно использовать одинарные кавычки:

SqlDataAdapter da = new SqlDataAdapter("select * from Table1 where ID= '" + LbLID.Text.Trim() + "'", con);

Вариант B: Ваш LbLId неправильный.. вы проверяете ["DI"].. когда я думаю, что это должно быть ["ID"]:

LbLID.Text =this.Page.Request.QueryString["ID"].ToString();

Я не вижу никаких проблем в коде у da.Fill(). Но я вижу еще одну проблему в следующем утверждении:

SqlConnection con = new SqlConnection("Data Source=local;Initial Catalog=DB;User 
 ID=sa;Password="pass);

...Password="pass); - скорее должно быть

...Password=" + pass);

ИЛИ ЖЕ

...Password=pass");

Мне интересно, вы не получаете неопределенную переменную ошибку для прохода *.

Другие вопросы по тегам