System::Void xxxxxx::WWWW::Accept_Click(System::Object^ sender, System::EventArgs^ e)
{
// Соединение с БД
String^ connectionString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=DatabaseWords.mdb";
OleDbConnection^ dbConnection = gcnew OleDbConnection(connectionString);
// Вводим слово
String^ MyWord = write->Text->Trim()->ToLower(); // Приводим слово к нижнему регистру и убираем пробелы
if (MyWord->Length == 0) {
MessageBox::Show("Введите слово!", "Ошибка");
return;
}
// Проверяем, было ли уже использовано слово
dbConnection->Open(); // открываем соединение
String^ checkQuery = "SELECT COUNT(*) FROM [UsedWords] WHERE [Word] = ?";
OleDbCommand^ checkCommand = gcnew OleDbCommand(checkQuery, dbConnection);
checkCommand->Parameters->Add(gcnew OleDbParameter("@word", MyWord));
int count = Convert::ToInt32(checkCommand->ExecuteScalar());
if (count > 0) {
MessageBox::Show("Это слово уже было использовано!", "Ошибка");
dbConnection->Close();
return;
}
// Добавляем слово в список использованных
String^ insertQuery = "INSERT INTO [UsedWords] ([Word]) VALUES (?)";
OleDbCommand^ insertCommand = gcnew OleDbCommand(insertQuery, dbConnection);
insertCommand->Parameters->Add(gcnew OleDbParameter("@word", MyWord));
insertCommand->ExecuteNonQuery();
// Запрос к БД для получения слова компьютера
String^ query = "SELECT * FROM [DatabaseWords]";
OleDbCommand^ dbCommand = gcnew OleDbCommand(query, dbConnection);
OleDbDataReader^ dbReader = dbCommand->ExecuteReader();
if (dbReader->HasRows == false) {
MessageBox::Show("Ошибка считывания данных!", "Ошибка");
} else {
bool found = false;
while (dbReader->Read()) {
WordComp->Text = Convert::ToString(dbReader["_City"]);
if (WordComp->Text->Length > 0 && MyWord->Length > 0 && WordComp->Text[0] == MyWord[MyWord->Length - 1]) {
found = true;
break;
}
}
if (!found) {
MessageBox::Show("Совпадений не найдено!", "Результат");
}
}
dbConnection->Close();
return System::Void();
}
MareIlЗнаток (253)
2 недели назад
Здравствуйте, это нужно создать новую таблицу-UsedWord? Я создал их, но когда пытаюсь запустить у строки: String^ query = "SELECT * FROM [DatabaseWords]"; появляется надпись - System.InvalidOperationException: "Подключение не было закрыто. Подключение открыто.", помогите пожалуйста
{
/* label2->Hide();*/
//Соединение с БД
String^ connectionString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=DatabaseWords.mdb";
OleDbConnection^ dbConnection = gcnew OleDbConnection(connectionString);
//Запрос к БД
dbConnection->Open(); //открываем соединение
String^ query = "SELECT * FROM [DatabaseWords]"; //запрос
OleDbCommand^ dbComand = gcnew OleDbCommand(query, dbConnection); //команда
OleDbDataReader^ dbReader = dbComand->ExecuteReader(); //считываем данные
//Вводим слово
String^ MyWord = write->Text;
int lastIndex = MyWord->Length - 1;
String^ MyWord_Cop = MyWord->Substring(0, lastIndex) + Char::ToUpper(MyWord[lastIndex]);
if (dbReader->HasRows == false) {
MessageBox::Show("Ошибка считывания данных!", "Ошибка");
}
else {
bool found = false;
while (dbReader->Read()) {
WordComp->Text = Convert::ToString(dbReader["_City"]);
if (WordComp->Text->Length > 0 && MyWord_Cop->Length > 0 && WordComp->Text[0] == MyWord_Cop[MyWord_Cop->Length - 1]) {
found = true;
break;
}
}
if (!found) {
MessageBox::Show("Совпадений не найдено!", "Результат");
}
}
return System::Void();
}