2015-03-25 6 views
0

Я фактически сохраняю значение с помощью сеанса, а затем перенаправляю на другую страницу с помощью кнопки изображения, где на основе значения сеанса я извлекаю данные из базы данных. Я получаю пользовательское исключение в строке. , пожалуйста, помогите!Передача значения datalist с использованием сеанса в asp.net

adap.Fill(dt1);//[SqlException (0x80131904): Incorrect syntax near '='.] 

И это мое кодирование.

protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 
{ 
    ImageButton btn = sender as ImageButton; 
    string modelId = btn.CommandArgument; 
    Session["modelid"] = modelId; 
    Response.Redirect("details.aspx"); 
} 

public partial class details : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection("Data Source=VISH;Initial Catalog=VISH;Integrated Security=True"); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     con.Open(); 
     SqlDataAdapter adap = new SqlDataAdapter("select * from details1 where Modelid=" + Session["modelid"], con); 
     DataTable dt1 = new DataTable(); 
     adap.Fill(dt1); 
     DataList1.DataSource = dt1; 
     DataBind(); 
    } 
+1

какое значение имеет Session [ «ModelID»]? – InferOn

+0

Поскольку я использую datalist на обеих страницах d, я извлекаю их из базы данных. это конструкционная часть кнопки изображения в datalist sharanya

ответ

0

Сначала передать объект сеанса строке.

(String) Session["modelid"] 
+0

где я должен это делать? на странице, где я объявляю сеанс или на странице, где я использую сеанс для выбора данных из базы данных? – sharanya

0

Я рекомендую вам avoid using string concatenation для создания команды - использовать parameters вместо этого.

Кроме того, вы должны проверить, имеет ли Session["modelid"] значение или нет, поскольку параметр с пустым значением будет вызывать именно данное сообщение:

Параметризованный запрос «(@Id NVARCHAR (4000)) * выберите из details1 где ModelID = @ ID»ожидает параметр '@Id', который не был поставлен

Таким образом, код будет:

protected void Page_Load(object sender, EventArgs e) 
{ 
    con.Open(); 

    var id = Session["modelid"]; 

    if (id != null) 
    {   
     SqlDataAdapter adap = new SqlDataAdapter("select * from details1 where [email protected]" , con); 
     adap.SelectCommand.Parameters.AddWithValue("@id",); 

     DataTable dt1 = new DataTable(); 
     adap.Fill(dt1); 
     DataList1.DataSource = dt1; 
     DataBind(); 
    } 
} 

Или используйте свойство Page.IsPostBack, если гарантировано, что Session["modelid"] будет установлен после первой обратной передачи.

Или просто используйте для него значение по умолчанию.

P.S .: Кроме того, это not a good idea использовать соединение на уровне экземпляра, где вы не можете Dispose (Close) это детерминированным образом. Лучше сделать его переменной уровня метод и использовать его с using пункта:

protected void Page_Load(object sender, EventArgs e) 
{ 
    using (SqlConnection con = new SqlConnection("Data Source=VISH;Initial Catalog=VISH;Integrated Security=True")) 
    { 
     // ...   
    } 
} 
+0

теперь это исключение. Параметрированный запрос '(@id nvarchar (4000)) выбирает * из details1, где Modelid = @ id' ожидает параметр '@id', который не был указан. – sharanya

+0

@sharanya Хм, это фактически предоставлено - 'AddWithValue (« @ id », Session [" modelid "]);'. Странно, я проверю - возможно, 'SqlDataAdapter' имеет некоторые проблемы с параметризованными запросами. –

+0

Поскольку я использую datalist на обеих страницах d, я извлекаю их из базы данных. это конструктивная часть кнопки изображения в datalist и часть кодирования, о которой я упоминал выше, может, пожалуйста, скажите мне, что может быть возможной ошибкой в ​​этом ? - – sharanya

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

  • Нет связанных вопросов^_^