Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем ошибка? 
V
    Опции темы
alir
Дата 16.3.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: нет
Всего: 4



Код

bool perem = false;
foreach (DataSet2.UsdataRow dataItem in dataSet21.Usdata)
{
      if (txtName.Text == dataItem.NAME)
     {
    perem = true;
    break;
     }
}
if (perem == false)
{
    . . .
}
else if (perem == true)
 Server.Transfer("NotAuthorized.aspx");


Задача следущая: искать в столбце имя, совпадающее с txtName.Text. Соответственно, если найдено такое имя, то делаем действие1, если не найдено - действие2. В данном коде он просто порпускает цикл и perem никогда не становится true, даже если есть совпадаюшие имена. Почему?
Вроде конструкция рабочая (такое же представление использую в дргуой части кода - работает).
Предложения кода с другой логикой приветствуются.
PM MAIL ICQ   Вверх
Exception
Дата 16.3.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



По такому коду мало что скажешь. А вообще, есть такая великая вещь - debug smile .
P.S. Попробуй сравнивать не dataItem.Name и txtName.Text, а dataItem.Name.Trim().ToLower() и txtName.Trim().ToLower(), это более универсально. Скорее всего, это решит проблему.
PM   Вверх
sergejzr
Дата 16.3.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Модератор: Название темы должно отражать ее суть!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
mr.DUDA
Дата 16.3.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Можно без цикла, SQL-like запрос:
Код
DataRow[] result = dataSet21.Usdata.Select("NAME = \'" + txtName.Text + "\'")

затем анализировать result.Length и брать результат из этого массива...


--------------------
user posted image
PM MAIL WWW   Вверх
alir
Дата 17.3.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: нет
Всего: 4



Exception
Цитата

А вообще, есть такая великая вещь - debug

smile Как раз в дебаге и проверял, что цикл он пропускает.

Цитата

По такому коду мало что скажешь.

Извне кода в данном сорце больше ничего нет. smile

Цитата

P.S. Попробуй сравнивать не dataItem.Name и txtName.Text, а dataItem.Name.Trim().ToLower() и txtName.Trim().ToLower(), это более универсально. Скорее всего, это решит проблему.

Дело не в логике сравнения, а в том, что он в этот if даже не заходит!


mr.DUDA
Что-то не втыкаю суть параметра функции select. Поясни плз.

Это сообщение отредактировал(а) alir - 17.3.2006, 14:22
PM MAIL ICQ   Вверх
mr.DUDA
Дата 17.3.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(alir @ 17.3.2006, 13:17 Найти цитируемый пост)
Что-то не втыкаю суть параметра функции select. Поясни плз.

Ну в мсдн же написано: в DataTable.Select передаётся часть SQL-запроса, стоящая после оператора WHERE.


--------------------
user posted image
PM MAIL WWW   Вверх
alir
Дата 20.3.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: нет
Всего: 4



Я все-таки понял почему он пропускал цикл. Все же Еxception был прав - надо было кидать весь код. Словами описывать проблему не стану, а напишу код - так сразу все станет ясно.


Вот так не работало
Код

private void Page_Load(object sender, System.EventArgs e)
{
 if (!IsPostBack)    
{
     oleDbDataAdapter1.Fill(dataSet21);        
}
}

private void butCreate_Click(object sender, System.EventArgs e)
{
bool perem = false;
foreach (DataSet2.UsdataRow dataItem in dataSet21.Usdata)
{
      if (txtName.Text == dataItem.NAME)
     {
    perem = true;
    break;
     }
}
if (perem == false)
{
    . . .
}
else if (perem == true)
 Server.Transfer("NotAuthorized.aspx");
}


А вот так уже все OK:
Код

private void Page_Load(object sender, System.EventArgs e)
{
     oleDbDataAdapter1.Fill(dataSet21);        
}

private void butCreate_Click(object sender, System.EventArgs e)
{
bool perem = false;
foreach (DataSet2.UsdataRow dataItem in dataSet21.Usdata)
{
      if (txtName.Text == dataItem.NAME)
     {
    perem = true;
    break;
     }
}
if (perem == false)
{
    . . .
}
else if (perem == true)
 Server.Transfer("NotAuthorized.aspx");
}


Это сообщение отредактировал(а) alir - 20.3.2006, 00:50
PM MAIL ICQ   Вверх
alir
Дата 20.3.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: нет
Всего: 4



Но опять же проблема. Данный прием не срабатывает в VS2005, так как там заполнение dataset'a идет не через adapter, а собственным методом fill. Внутренюю работу такой спецификации работы объекта dataset я не знаю. Подскажите как реализовать подобный прием в VS2005.
PM MAIL ICQ   Вверх
alir
Дата 22.3.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: нет
Всего: 4



И снова сам отвечаю на свой простой вопрос. smile Чтобы цикл сработал, как раз надо явно задать adapter и заполнить через него dataset. Код уже для VS2005:
Код

    protected void Button1_Click(object sender, EventArgs e)
    {
        DataSet1 ds = new DataSet1();
        DataSet1TableAdapters.UsdataTableAdapter dsAdapter = new DataSet1TableAdapters.UsdataTableAdapter();
        dsAdapter.Fill(ds.Usdata);
        bool perem = false;
        foreach (DataSet1.UsdataRow dataItem in ds.Usdata)
        {
           if ((txtName.Text == dataItem.NAME.ToString()) && (txtPassword.Text == dataItem.PASS.ToString()))
           {
               perem = true;
               break;
           }
        }
        if(perem == true)
        {
           . . . 
        }
        else if (perem == false)
            . . .
     }

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.