2013-12-06 2 views
0

Я попытался связать метку из 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(); 
+0

Какова ценность 'LbLID.Text.Trim()'? – Szymon

ответ

5

Вы не можете нарушить нормальные строковые литералы на несколько строк, а также ваше закрытие цитата неуместна:

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

или используйте стеновой литерал, который вы можете получить br ЕАК по нескольким направлениям:

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

Тем не менее, ваш код уязвим для атак SQL injection. Для вас самих и ради ваших пользователей вам действительно нужно использовать параметризованные запросы, а не конкатенировать ваши 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.

+0

Я только предположил, что это OP, форматирующий его для SO .. ошибка не является ошибкой компилятора, это ошибка SQL. –

+0

@SimonWhitehead Я полагаю, что это тоже возможно. –

+0

OP действительно скажет, на какой строке это происходит .. что означает, что это происходит во время выполнения ... –

3

Попробуйте следующее:

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

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

Таким образом, вы должны попробовать это:

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

Или короче:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Table1 WHERE [email protected]", con); 
da.SelectCommand.AddWithValue("id",LBLID.Text.Trim()); 
2

Ошибка 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(); 
+0

localhost: 1611/Dealer.aspx? DI = 428116920 – Mhmt

0

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

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

...Password="pass); - а это должно быть

...Password=" + pass); 

ИЛИ

...Password=pass"); 

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

+0

Пароль = pass "); – Mhmt

+0

вы получили его правильно с помощью пароля = pass"). ; ???? – Savaratkar

+0

Нет. Я не видел пароль = «проход», когда задаю вопрос на вопрос. Решено @ p.s.w.g ответить – Mhmt

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