PDA

View Full Version : [C++] Problema aggiornamento database MySql


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

Safhkit
19-09-2008, 18:35
Nessuno sa dove sta l'inghippo??

Aiuto!!

avastreg
20-09-2008, 21:01
il problema (stranamente) potrebbe risiedere nei parametri.

Cioè mi spiego meglio buttandola lì: proprio oggi stavo facendo un applicazione c# che si connette ad un db mysql tramite ADO.NET (http://dev.mysql.com/downloads/connector/net/5.2.html), ovvero nel tuo stesso modo, ho notato che utilizzando i parametri, la query di inserimento che facevo inseriva esclusivamente valori nulli al posto dei valori dei parametri, anche se ho verificato che questi venivano effettivamente inizializzati.

Non so sinceramente se ci sia un nesso tra i due casi..