Parameter.addwithvalue - ExecuteReader: свойство CommandText не было инициализировано
Я получаю ошибку ExecuteReader: свойство CommandText не было инициализировано на adapter.fill(ds)
линия. Странная вещь в том, что если я заменю @user
с реальной строкой (например, 'name') она работает отлично, поэтому, кажется, что-то сломано в части, которая устанавливает параметр.
Я пытался установить строку как с, так и без '
's (то есть @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();
}
}
2 ответа
Редактировать Забудьте обо всем, просто следуйте инструкциям на странице
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();
}
Вероятно, вы получаете 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);