Исключение | необходимо объявить скалярную переменную @IdAlbum

Я получаю сообщение об ошибке «необходимо объявить скалярную переменную @IdAlbum». Я уже просматривал подобные сообщения на эту тему, но это не помогает. Может ли кто-нибудь взглянуть на код ниже? Когда я использую параметры команды, это дает мне ошибку. Если я не использую параметры команды, все работает нормально. Я добавил комментарии в код, чтобы выделить проблему.

 public DataSet databind ()
    {
        DataSet ds = new DataSet();
        string con_str = ConfigurationManager.ConnectionStrings["con_nc"].ConnectionString;
        SqlConnection con = new SqlConnection(con_str);
        try
        {

            con.Open();

            string albumId = Request.QueryString["AlbumId"].Trim();
            this.albumName = Request.QueryString["AlbumName"];

            //getting the count of the pictures from DB and assigning it to pagesize so that all pictures of single album come in 1 page only.

            string photoCountQuery = "select count(*) from gallery_photos where AlbumId=@albumId"; // THIS WORKS FINE


            SqlCommand picCount = new SqlCommand(photoCountQuery, con);// THIS WORKS FINE
            picCount.Parameters.AddWithValue("@albumID", albumId);// THIS WORKS FINE
            int photoCount = Convert.ToInt16(picCount.ExecuteScalar());// THIS WORKS FINE

            int start = (int)ViewState["start"];// THIS WORKS FINE
            ViewState["pagesize"] = photoCount;// THIS WORKS FINE

            //string query = "select * from gallery_photos where AlbumId='" + albumId + "'"; //// THIS WORKS FINE
            string query = "select * from gallery_photos where AlbumId=@IdAlbum";// THIS is the problem. It does not work when i use command paramters
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.Parameters.AddWithValue("@IdAlbum", albumId);
            SqlDataAdapter da = new SqlDataAdapter(query, con);

            da.Fill(ds, start, (int)(ViewState["pagesize"]), "gallery_photos");


        }
        catch (Exception ex)
        {
            ExceptionUtility.LogException(ex, "Exception in " + Path.GetFileName(Page.AppRelativeVirtualPath).ToString());
            Context.ApplicationInstance.CompleteRequest();
        }
        finally
        {
            con.Close();
        }
        return ds;
    }

person Azfar    schedule 23.01.2016    source источник


Ответы (1)


Посмотрите на это: https://msdn.microsoft.com/en-us/library/ebxy9a8b(v=vs.80).aspx

Вы делаете это неправильно, вы должны использовать DataAdapter для заполнения недостающих параметров.

Посмотрите также на этот вопрос и ответ, он дает хорошее объяснение: в SqlDataAdapter

person csharpfolk    schedule 23.01.2016