harish kashyap01 Ответов: 2

(Datatable)httpcontext.current.session показывает null


привет,
У меня возникли проблемы при доступе к HttpContext.Current.Значение сеанса.Он показывает ноль.

сообщение об исключении "System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта"

Что я уже пробовал:

Вот пример кода.
публичный статический список<string> GetAutoCustomers(string prefixText)
{
string strFilter = строка.Пустой;
DataTable dtCustomers = новый DataTable();

BusinessObjects.es_CustomersBO ObjCustomersBO = новый BusinessObjects.es_CustomersBO();
DataObjects.es_CustomersDAL ObjCustomersDAL = новый DataObjects.es_CustomersDAL();
ObjCustomersBO.ES_RoleSwitchChar = _importantData;
ObjCustomersBO.ES_RoleValue = _userId;
DataSet dsCustomers = новый набор данных();

dsCustomers =ObjCustomersDAL.Метод Getcustomers(ObjCustomersBO);

DataView dv = dsCustomers.Таблицы[0].DefaultView;
strFilter += "ES_CustomerName LIKE '" + prefixText + "%'";
dv.RowFilter = strFilter;
dtCustomers = dv.ToTable();
List<string> Customer = новый список<string>();
for (int i = 0; i <dtCustomers.Rows.Граф; i++)
{
Покупатель.Добавить(dtCustomers.Строки[i][2].Метод toString());
Свойство HttpContext.Тока.Сеанс["CustomerName"] = dtCustomers;
}

возвращение клиента;

}





общественного недействительными btnone_Click(объект отправителя, EventArgs в электронной)
пробовать
{
if (txtCustomers.Text.Length>0 )
{
DataTable dtCustomer = новый DataTable();
dtCustomer = (DataTable)HttpContext.Current.Сеанс["CustomerName"];
DataRow[] dr;
ВАР свойства primarykey = "ES_CustomerName";
строка s = Session["CustomerName"].Метод toString();
строка h = s;

dr = dtCustomer.Выберите("[" + primaryKey + "] Like '%" + txtCustomers.Текст + "%'");
ddlCustomers.SelectedValue = dr[0][0].Метод toString();
}
ObjCustomersBO.ES_CustomerMapID = Конвертировать.ToInt32(hdnedit_recid.Value);
ObjCustomersBO.ES_CustomerIDRef = Конвертировать.ToInt32(ddlCustomers.SelectedValue);

GetCustomerUserMapping();
}
поймать(исключение ИС)
{
Ответ.Писать("ошибка:"+иск);
строку STR = ИС.Метод toString();
}

2 Ответов

Рейтинг:
1

F-ES Sitecore

Либо объект HttpContext имеет значение null, свойство HttpContext.Ток нулевой или HttpContext.Тока.Сеанс равен нулю. Мы не можем запустить ваш код, поэтому мы не знаем, какой именно, вам нужно будет использовать отладчик, чтобы узнать. Почему вы просто не используете "сеанс"? Сеанс просто работает, если он не для вас, то это происходит из-за того, что вы делаете что-то, о чем Вы нам не говорите.


harish kashyap01

Спасибо за ответ,


проблема кроется в последней строке

DataView dv = dsCustomers.Таблицы[0].DefaultView;
strFilter += "ES_CustomerName LIKE '" + prefixText + "%'";
dv.RowFilter = strFilter;
-->dtCustomers = dv.ToTable();

после преобразования DataView в таблицу Таблица имеет 0 строк.я не понимаю, почему это происходит именно так.

Рейтинг:
0

Vincent Maverick Durano

Несколько предложений для вас:

1. При обращении к Session значение, всегда проверяйте на наличие object сначала обнуление, чтобы избежать неожиданной ошибки. Например:

if(Session["CustomerName"] != null){
   //access Session value here
}


2. при фильтрации данных из DataTable, попробуйте сначала проверить количество строк. Например:

if(dtCustomer.Rows.Count > 0){
   // found rows.
   // do something
}


3. Если вы фильтруете данные и не получаете желаемого результата, то лучше всего использовать отладчик, как уже предлагалось. Установите точку останова и шагните в свой код, чтобы выяснить, что происходит в коде. Видеть: Навигация по коду с помощью отладчика

4. Если вы работаете с SQL-запросами и ваш запрос не дает вам желаемого результата, то используйте среду SQL Management Studio и запустите запрос, который у вас есть в коде, чтобы вы знали, соответствует ли ваш запрос параметрам, которые вы ему передали. Например запустить ваш фактический запрос SELECT в SQL-запросе анализатор но на этот раз вам предстоит пройти сложнее кодированное значение вашего Like пункт:

SELECT * FROM TableName WHERE ES_CustomerName LIKE 'ActualValueThatYouWantToTest%';


5. Используйте параметризацию запроса для защитите свой код от SQL-инъекций Но так как вы использовали DataView RowFilter, Я не уверен, что можно использовать параметры с a DataView Вы можете сделать простой string replace однако, чтобы избежать одиночных кавычек. Например:

dv.rowfilter= String.Format(" ES_CustomerName LIKE ‘{0}%’", prefixText.Replace("'", "''"));