Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите срочно!!! С++ SQL

Natsu Ученик (210), закрыт 2 дня назад
try
{
String^ connectionstring = "Data Source=WIN-DFFK8CA8HJQ\\SQLEXPRESS;Initial Catalog=DBConstructorTesting;Persist Security Info=True;Integrated Security=true;";
SqlConnection con(connectionstring);
con.Open ();

String^ sqlquery = "SELECT * FROM Slot_1";
SqlCommand cmd(sqlquery, % con);
SqlDataReader^ reader = cmd.ExecuteReader();

while (reader->Read())
{
Qustionss = (int)reader["Qustions"];
CorrectAnswerr = (int)reader["CorrectAnswer"];

}

reader->Close();
con.Close();
}
catch (Exception^ ex)
{
GetType();
MessageBox::Show(ex->Message);
throw ex;
}
при нажатии на кнопку код выдаёт ошибку System.InvalidCastException: "Заданное приведение является недопустимым."
таблица сделана так
CREATE TABLE [dbo].[Slot_1] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (MAX) NULL,
[Qustions] INT NULL,
[Qustion] NVARCHAR (MAX) NULL,
[Answer1] NVARCHAR (MAX) NULL,
[Answer2] NVARCHAR (MAX) NULL,
[Answer3] NVARCHAR (MAX) NULL,
[Answer4] NVARCHAR (MAX) NULL,
[CorrectAnswer] INT NULL,
PRIMARY KEY CLUSTERED ([ID] ASC)
);
Qustionss = (int)reader["Qustions"];
CorrectAnswerr = (int)reader["CorrectAnswer"];
код должен в переменные которые в другой форме сохранить данные.
Лучший ответ
Sergio 2.1 Оракул (67192) 2 дня назад
try
{
String^ connectionstring = "Data Source=WIN-DFFK8CA8HJQ\\SQLEXPRESS;Initial Catalog=DBConstructorTesting;Persist Security Info=True;Integrated Security=true;";
SqlConnection con(connectionstring);
con.Open ();

String^ sqlquery = "SELECT * FROM Slot_1";
SqlCommand cmd(sqlquery, %con);
SqlDataReader^ reader = cmd.ExecuteReader();

while (reader->Read())
{
// Проверка на DBNull и приведение с использованием Convert
if (!reader->IsDBNull(reader->GetOrdinal("Qustions")))
Qustionss = Convert::ToInt32(reader["Qustions"]);
else
Qustionss = 0; // или другое значение по умолчанию

if (!reader->IsDBNull(reader->GetOrdinal("CorrectAnswer")))
CorrectAnswerr = Convert::ToInt32(reader["CorrectAnswer"]);
else
CorrectAnswerr = 0; // или другое значение по умолчанию
}

reader->Close();
con.Close();
}
catch (Exception^ ex)
{
// Логирование типа исключения полезно для отладки
MessageBox::Show("Ошибка: " + ex->Message);
// Возможно, не нужно повторно выбрасывать исключение, если вы уже обработали его
// throw ex;
}
NatsuУченик (210) 2 дня назад
напишите пожалуйста на пастбин. У вас комментарий пустой
Sergio 2.1 Оракул (67192) Natsu, https://pastebin.com/YHJhM7WT
sdadas bvcbcvdЗнаток (268) 2 дня назад
Бро, на этот раз не помогу, работаю :D , а так попробуй в чат гпт посмотреть, может поможет чем-то
Natsu Ученик (210) sdadas bvcbcvd, Всё нормально, проблема вроде как решилась. С чатом гпт пробовал но, что-то не шло, а щас уже заработало, осталось по аналогии со стрингом всё сделать.
Остальные ответы
Jurijus Zaksas Искусственный Интеллект (445630) 2 дня назад
А что возвращает этот reader и почему ты так смело явно приводишь это к int? Он, по идее, должен объект какой-то возвращать, там дальше надо через свойства этого объекта работать, скорее всего.
safsr sdfdsfff Ученик (191) 2 дня назад
Помогите срочно!!! С++ SQL

try

{

\tString^ connectionstring = \"Data Source=WIN-DFFK8CA8HJQ\\\\SQLEXPRESS;Initial Catalog=DBConstructorTesting;Persist Security Info=True;Integrated Security=true;\";

\tSqlConnection con(connectionstring);

\ tcon.Open ();

\tString^ sqlquery = \"SELECT * FROM Slot_1\";

\tSqlCommand cmd(sqlquery, %con);

\tSqlDataReader^ reader = cmd.ExecuteReader();

\twhile (reader->Read())

\t{

\t\tQustionss = reader["Qustions"] != DBNull::Value ? (int)reader["Qustions"] : 0;

\t\tCorrectAnswerr = reader["CorrectAnswer"] != DBNull::Value ? (int)reader["CorrectAnswer"] : 0;

\t}

\treader->Close();

\tcon.Close();

}

catch (Exception^ ex)

{

\tGetType();

\tMessageBox::Show(ex->Message);

\tthrow ex;

}

Обратите внимание: добавлена проверка на DBNull::Value перед приведение типов, что позволит избежать ошибки System.InvalidCastException. Убедитесь, что переменные Qustionss и CorrectAnswerr корректно определены в вашей другой форме.
Похожие вопросы