Parameter.addwithvalue — ExecuteReader: свойство CommandText не инициализировано

Я получаю сообщение об ошибке ExecuteReader: свойство CommandText не было инициализировано в строке adapter.fill(ds). Странно то, что если я заменю @user реальной строкой (например, «имя»), она будет работать отлично, поэтому что-то, похоже, сломано в части, которая устанавливает параметр.

Я пытался установить строку как с ', так и без нее (т.е. @user/'@user'). Я также пытался использовать как =, так и like. User.Identity.Name.ToString() был протестирован, чтобы правильно вернуть вошедшего в систему пользователя, установив для него текстовое поле.

Извините за переменные базы данных, отличные от английского, и если на этот вопрос где-то был дан ответ. Я почти сдался после полудюжины часов поиска (может быть, я просто отстой).

Соответствующий код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;


public partial class Bruker : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

    String conn = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
    SqlConnection sql = new SqlConnection(conn);
    sql.Open();

    SqlCommand command = new SqlCommand(conn);
    command.CommandText = "SELECT klubb.KlubbNavn FROM Klubber klubb inner join User_Klubber_Connection conn on Klubb.Klubb_Id = conn.Klubb_Id inner join aspnet_Users bruker on bruker.UserId = conn.UserId WHERE bruker.UserName = @user";
    command.Parameters.AddWithValue("@user", User.Identity.Name.ToString());
    command.Connection = sql;
    SetDropDownList(command);
    DropDownList1.SelectedIndex = 0;
    ChangeGridView(GetMembersOfClub(), sql);

    sql.Close();

}

protected void SetDropDownList(SqlCommand command)
{

    SqlDataAdapter adapter = new SqlDataAdapter(command);
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

    DataSet ds = new DataSet();
    adapter.Fill(ds);

    DropDownList1.DataSource = ds;
    DropDownList1.DataTextField = "KlubbNavn";

    DropDownList1.DataBind();

}
}

person user1339253    schedule 12.03.2013    source источник


Ответы (2)


Изменить Забудьте обо всем, просто следуйте за page_load

 Response.Write(String.Format("user name is {0}",  User.Identity.Name));

И увидеть вывод

работает нормально

  protected void Page_Load(object sender, EventArgs e)
    {


        SqlConnection sql = new SqlConnection( ConfigurationManager.ConnectionStrings["yourConnectionName"].ConnectionString);
        sql.Open();

        SqlCommand command = new SqlCommand("Select * from userinfo where uloginid=@user", sql);
        command.Parameters.AddWithValue("@user", User.Identity.Name.ToString());
        SetDropDownList(command);
        DropDownList1.SelectedIndex = 0;

        sql.Close();

    }

    protected void SetDropDownList(SqlCommand command)
    {

        SqlDataAdapter adapter = new SqlDataAdapter(command);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        DropDownList1.DataSource = ds;
        DropDownList1.DataTextField = "uFirstName";

        DropDownList1.DataBind();

    }
person Siz S    schedule 12.03.2013
comment
Я не понимаю этот ответ - каково конкретное решение? - person PandaWood; 01.03.2016
comment
@PandaWood Прошло много лет с тех пор, как я сделал это, поэтому я не могу быть уверен, но я предполагаю, что это было что-то вроде неправильной установки параметра, и запуск строки, которую он предлагает, позволит вам это увидеть. Таким образом, исправление состоит в том, чтобы убедиться, что значение, которое вы устанавливаете для «@user», действительно имеет значение. Но я этого совсем не помню... :'D - person user1339253; 06.11.2017

Вероятно, вы получаете null в command.Parameters.AddWithValue("@user", User.Identity.Name.ToString());

Пытаться:

command.Parameters.AddWithValue("@user", User.Identity.Name ?? String.Empty);

Изменить: (после комментариев)

Вы пытались создать параметр вручную?

Вместо использования AddWithValue(...) попробуйте:

SqlParameter param  = new SqlParameter();
param.ParameterName = "@user";
param.Value         = User.Identity.Name.ToString();
param.DbType        =  SqlDbType.VarChar;
command.Parameters.Add(param);
person Retired_User    schedule 12.03.2013