ahmed_sa Ответов: 3

Почему еще оператор для функции userexiststoday не работает и как его решить


Я работаю в c# windows form vs 2015, выбирая данные из excel
проблема я сталкиваюсь с ней лицом к лицу
предположим у меня есть в excel файл
идентификатор пользователя dateprint
1001 22/02/2017

если вы попытаетесь добавить этого пользователя 1001 снова с датой 23/02/2017
он должен дать мне сообщение, которое этот пользователь нашел раньше
но этого не происходит и это на самом деле моя проблема
мой код

bool c = QRC.UserExists(textBox1.Text);  
  
bool b = UserExistsToday();  
  
if (c == true)  
  
{  
  
if (b == true)  
  
{  
  
  
label8.Text = "User added today";  
  
  
  
}  
  
  
else  
  
{  
  
  
label8.Text = "User added before";  
  
  
}  
}  
  
}  
  
else  
  
{  
  
label8.Text = "User added first time";  
  
  
}  
  
my functions  
  
label6 represent datetoday  
  
  
public bool UserExistsToday()  
{  
OleDbConnection cn = newOleDbConnection(connection);  
  
string str = $"select * from [Sheet1$] WHERE UserNo='{textBox1.Text}' AND DatePrint = '{label6.Text}'";  
  
OleDbCommand cmd = newOleDbCommand(str, cn);  
  
cn.Open();  
  
var reader = cmd.ExecuteReader();  
  
return reader.HasRows;  
  
}  
  
public bool UserExists(string UserNo)  
  
{  
  
OleDbConnection cn = newOleDbConnection(connection);  
  
string str = "SELECT UserNo FROM [Sheet1$] WHERE UserNo = @UserNo";  
  
OleDbCommand cmd = newOleDbCommand(str, cn);  
  
cmd.Parameters.AddWithValue("@UserNo", UserNo);  
  
cn.Open();  
  
var reader = cmd.ExecuteReader();  
  
return reader.HasRows;  
}


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

why else statement for function UserExistsToday not work and how to solve it

3 Ответов

Рейтинг:
2

Bryian Tan

Ваш код трудно читать, возможно,вы неправильно скопировали его. Во всяком случае, вы упомянули

"предположим, у меня есть в excel файл
идентификатор пользователя dateprint
1001 22/02/2017"

Затем в методе UserExistsToday() вы должны выбрать UserNo вместо [user id] и я надеюсь, что dateprint = DatePrint, возможно, вы наберете его в нижнем регистре.

string str = $"select * from [Sheet1$] WHERE UserNo='{textBox1.Text}' AND DatePrint = '{label6.Text}'";


Рейтинг:
2

Patrice T

Сначала сделайте отступ в коде

bool c = QRC.UserExists(textBox1.Text);
bool b = UserExistsToday();
if (c == true)
{
	if (b == true)
	{
		label8.Text = "User added today";
	}
	else
	{
		label8.Text = "User added before";
	}
} // the if close here
}
else
{
	label8.Text = "User added first time";
}

Слишком много закрывающих скобок.
Правильные отступы помогают выявить такого рода проблемы.
В противном случае отладчик покажет вам, что делает код. Когда вы видите, что ваш код не уважает else пункт, проблема скобок, вероятно, виновна.
-----
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

Dave Kreskowiak

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

Кроме того, научитесь использовать отладчик. Это помогло бы вам решить эту проблему очень быстро.