Domanda

Sto cercando di correggere bug virgoletta singola nel codice:

std::string Index;

connection->Open();
String^ sTableName = gcnew String(TableName.c_str());
String^ insertstring = String::Format("INSERT INTO {0} (idx, rec, date) VALUES (@idx,    @rec, getdate())", sTableName);
SqlCommand^ command = gcnew SqlCommand(insertstring, connection);
String^ idx = gcnew String(Index.c_str());
command->Parameters->Add("@idx", SqlDbType::VarChar)->Value = idx;

Il bug è che se IDX = "che è", la SQL fallisce dicendo che c'è un errore di sintassi. Ovviamente, il problema è nella citazione. Ma un po 'googling dimostra che utilizzando i parametri è il modo di lavorare con le citazioni. E SqlParameter funziona bene, se il tipo è TESTO e non VARCHAR.

ci sono altre soluzioni che raddoppiando manualmente il numero di simboli di citazione nella stringa?

Aggiornamento: Ho provato a modificare manualmente questo campo in SQL Management Studio e non ho permesso apici nel campo VARCHAR. E 'normale questo in SQL?

È stato utile?

Soluzione

Ho il sospetto che il problema è o un preventivo ottenere nel vostro nome della tabella, o che idx suona più come il nome di un tipo di numero di un tipo di carattere.


Sulla base della sua aggiornamento, vi suggerisco di controllare la presenza di vincoli extra sul tavolo in studio gestione.

Altri suggerimenti

A dire il vero non ho mai avuto un problema con SqlParameters. Ma provare quanto segue:

http://msdn.microsoft .com / it-it / library / system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

command->Parameters->AddWithValue("@idx", idx);

Questo dovrebbe funzionare e codificare correttamente per voi.

Se sei sicuro che i suoi cita un prob poi,

C # codice:

idx = idx.Replace("'", "''"); 

risolverebbe il problema.

Siamo spiacenti.

Il problema era nel codice SQL di trigger. Dopo la rimozione di loro, tutto ha funzionato bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top