Safhkit
18-09-2008, 14:30
Salve,
premetto che il db mysql che sto usando ha sempre funzionato, nel senso che, dall'applicazione c++ (Visual Studio 2005) che sto creando, riesco a recuperarne i dati, ad inserirne di nuovi, eliminarli ed aggiornarli. Inizialmente i comandi SQL li creavo "a mano", cioè passo passo con la concatenazione delle varie stringhe che componevano il comando, inserendo i valori provenienti da textbox ecc.
Ho notato però che questo modo di operare crea problemi quando bisogna inserire stringhe contenenti apici ( ' ). Infatti i comandi SQL creati a mano fanno confusione pensando che questi siano i delimitatori dei valori stringa delle colonne della tabella del db.
Ho risolto tale problema con l'uso dei parametri.
A questo punto, però, ecco che il mio db non viene più aggiornato.
Vi posto il codice:
DataSet^ ds = gcnew DataSet();
MySqlConnection^ myconn = gcnew MySqlConnection("Server=Localhost;database=MyFilmDB;uid=root;pwd=root");
myconn->Open();
MySqlDataAdapter^ da = gcnew MySqlDataAdapter("SELECT * FROM Films",myconn);
da->Fill(ds,"Films");
da->UpdateCommand = gcnew MySqlCommand("UPDATE Films SET Titolo=@Titolo, Genere=@Genere, Supporto=@Supporto, Anno=@Anno, Attori=@Attori, Trama=@Trama WHERE Codice=@Codice",myconn);
da->UpdateCommand->CommandType = System::Data::CommandType::Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Titolo",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Titolo"]->Value=txtTitle->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Genere",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Genere"]->Value=cmbGenere->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Supporto",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Supporto"]->Value=cmbSupporto->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Anno",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Anno"]->Value=txtYear->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Attori",MySql::Data::MySqlClient::MySqlDbType::Int32));
da->UpdateCommand->Parameters["@Attori"]->Value=txtAttori->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Trama",MySql::Data::MySqlClient::MySqlDbType::VarChar,600));
da->UpdateCommand->Parameters["@Trama"]->Value=txtTrama->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Codice",MySql::Data::MySqlClient::MySqlDbType::Int32));
da->UpdateCommand->Parameters["@Codice"]->Value=Convert::ToString(cod);
da->AcceptChangesDuringUpdate = true;
MySqlTransaction^ mytrans = myconn->BeginTransaction();
da->UpdateCommand->Transaction=mytrans;
da->UpdateCommand->ExecuteNonQuery();
mytrans->Commit();
myconn->Close();
Spero sia stato chiaro.
Se c'è qualche problema con la sintassi da usare nel forum che non ho rispettato vi chiedo scusa e chiederei al moderatore di non chiudermi la discussione, ma dirmi solamente dove ho sbagliato così che in futuro non commetta più errori.
Sapete aiutarmi?
Grazie
premetto che il db mysql che sto usando ha sempre funzionato, nel senso che, dall'applicazione c++ (Visual Studio 2005) che sto creando, riesco a recuperarne i dati, ad inserirne di nuovi, eliminarli ed aggiornarli. Inizialmente i comandi SQL li creavo "a mano", cioè passo passo con la concatenazione delle varie stringhe che componevano il comando, inserendo i valori provenienti da textbox ecc.
Ho notato però che questo modo di operare crea problemi quando bisogna inserire stringhe contenenti apici ( ' ). Infatti i comandi SQL creati a mano fanno confusione pensando che questi siano i delimitatori dei valori stringa delle colonne della tabella del db.
Ho risolto tale problema con l'uso dei parametri.
A questo punto, però, ecco che il mio db non viene più aggiornato.
Vi posto il codice:
DataSet^ ds = gcnew DataSet();
MySqlConnection^ myconn = gcnew MySqlConnection("Server=Localhost;database=MyFilmDB;uid=root;pwd=root");
myconn->Open();
MySqlDataAdapter^ da = gcnew MySqlDataAdapter("SELECT * FROM Films",myconn);
da->Fill(ds,"Films");
da->UpdateCommand = gcnew MySqlCommand("UPDATE Films SET Titolo=@Titolo, Genere=@Genere, Supporto=@Supporto, Anno=@Anno, Attori=@Attori, Trama=@Trama WHERE Codice=@Codice",myconn);
da->UpdateCommand->CommandType = System::Data::CommandType::Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Titolo",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Titolo"]->Value=txtTitle->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Genere",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Genere"]->Value=cmbGenere->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Supporto",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Supporto"]->Value=cmbSupporto->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Anno",MySql::Data::MySqlClient::MySqlDbType::VarChar,45));
da->UpdateCommand->Parameters["@Anno"]->Value=txtYear->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Attori",MySql::Data::MySqlClient::MySqlDbType::Int32));
da->UpdateCommand->Parameters["@Attori"]->Value=txtAttori->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Trama",MySql::Data::MySqlClient::MySqlDbType::VarChar,600));
da->UpdateCommand->Parameters["@Trama"]->Value=txtTrama->Text;
da->UpdateCommand->Parameters->Add(gcnew MySqlParameter("@Codice",MySql::Data::MySqlClient::MySqlDbType::Int32));
da->UpdateCommand->Parameters["@Codice"]->Value=Convert::ToString(cod);
da->AcceptChangesDuringUpdate = true;
MySqlTransaction^ mytrans = myconn->BeginTransaction();
da->UpdateCommand->Transaction=mytrans;
da->UpdateCommand->ExecuteNonQuery();
mytrans->Commit();
myconn->Close();
Spero sia stato chiaro.
Se c'è qualche problema con la sintassi da usare nel forum che non ho rispettato vi chiedo scusa e chiederei al moderatore di non chiudermi la discussione, ma dirmi solamente dove ho sbagliato così che in futuro non commetta più errori.
Sapete aiutarmi?
Grazie