Почему я получаю неправильный синтаксис рядом с ошибкой '='
Я пытался связать ярлык из 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");
Мне интересно, вы не получаете неопределенную переменную ошибку для прохода *.