Insertion quote dans une table MSI

coyotejoebar Messages postés 4 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 24 janvier 2007 - 22 janv. 2007 à 10:55
coyotejoebar Messages postés 4 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 24 janvier 2007 - 24 janv. 2007 à 16:00
Bonjour,

Dans un fichier MSI, j'essaye d'insérer une ligne dans la table ISString depuis un objet DataTable avec le code suivant :


For Each l_DataRow In l_DataTable.Rows


  l_str_Requete = "INSERT INTO `ISString` (`ISString`, `ISLanguage_`, `Value`, `Encoded`, `Comment`) VALUES (" + _
                  "'" + l_DataRow(COL_IS_STRING).ToString + "', " + _
                  "'" + Me.m_str_LanguageID + "', " + _
                  "'" + l_DataRow(COL_VALUE).ToString.Replace("'", "\'") + "', " + _
                  "0, " + _
                  "'" + l_DataRow(COL_COMMENT).ToString + "') "


  Try


    l_View = p_Database.OpenView(l_str_Requete)


    l_View.Execute()


  Catch ex As Exception




    l_str_Erreur += l_str_Requete + vbCrLf


  End Try


Next


Tout se passe bien jusqu'au moment où la chaine à insérer contienne une simple quote. J'ai essayé de la préfixer par une autre simple quote ou par un backslash, mais rien à faire...

Quelqun pourrais m'aider????

2 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 janv. 2007 à 11:07
Dans ce cas là remplace tes simples quotes par des doubles quotes à l'intérieur de ta requette.

Attention, en vb, pour dire que la double quote fait partie de la chaine, il faut la doubler.

l_str_Requete = "INSERT INTO `ISString` (`ISString`, `ISLanguage_`, `Value`, `Encoded`, `Comment`) VALUES (" + _
                  """" + l_DataRow(COL_IS_STRING).ToString + """, " + _
                  """" + Me.m_str_LanguageID + """, " + _
                  """" + l_DataRow(COL_VALUE).ToString + """, " + _
                  "0, " + _
                  """" + l_DataRow(COL_COMMENT).ToString + """) "

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
coyotejoebar Messages postés 4 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 24 janvier 2007
24 janv. 2007 à 16:00
Désolé, mais j'avais déjà essayé, merci quand même . J'ai résolu mon pb avec le code suivant d'après le lien http://blogs.msdn.com/heaths/archiv...ape-quotes.aspx. :

If



Me
.m_Type_Projet = Type_Projet.Acrobat

Then

l_StreamReader =




New
System.IO.StreamReader(CHEMIN_MSI_STRINGS_PRO.Replace(

"3L"
,

Me
.m_str_3L), System.Text.Encoding.Unicode)


ElseIf



Me
.m_Type_Projet = Type_Projet.Reader

Then

l_StreamReader =




New
System.IO.StreamReader(CHEMIN_MSI_STRINGS_READER.Replace(

"3L"
,

Me
.m_str_3L), System.Text.Encoding.Unicode)


End



If

l_str_Requete "DELETE FROM `ISString` WHERE `ISLanguage_` '"
+

Me
.m_str_LanguageID +

"'"

l_View = p_Database.OpenView(l_str_Requete)


l_View.Execute()


l_str_Requete "SELECT `ISString`, `Value`, `Comment`, `ISLanguage_`, `Encoded` FROM `ISString` WHERE `ISLanguage_` '"
+

Me
.m_str_LanguageID +

"'"

l_View = p_Database.OpenView(l_str_Requete)


l_View.Execute()







While



Not
l_StreamReader.EndOfStream


Dim
l_Record

As
WindowsInstaller.Recordl_Record = p_Installer.CreateRecord(5)

l_str_LigneComplete = l_StreamReader.ReadLine()

l_str_LigneParsee = l_str_LigneComplete.Split(vbTab)


For



Each
l_str_Colonne

In
l_str_LigneParsee


If
l_i_Cpt_Colonnes = l_str_LigneParsee.Length - 1

Or
l_i_Cpt_Colonnes = l_i_NbColonnes - 1

Then



Exit



For

l_Record.StringData(l_i_Cpt_Colonnes + 1) = l_str_Colonne)


l_i_Cpt_Colonnes += 1







Next

l_Record.StringData(4) =




Me
.m_str_LanguageIDl_Record.StringData(5) = 0


Try

l_View.Modify(WindowsInstaller.MsiViewModify.msiViewModifyAssign, l_Record)







Catch
ex

As
Exceptionl_str_Erreur += l_Record.StringData(1).ToString + vbTab + l_Record.StringData(2).ToString + vbTab + l_Record.StringData(3).ToString + l_Record.StringData(4).ToString + vbTab + l_Record.StringData(5).ToString + vbCrLf


End



Try

l_i_Cpt_Colonnes = 0







End



While
0
Rejoignez-nous