我的vb.net查询到Mysql之后反斜杠消失了

时间:2011-09-22 20:09:36

标签: mysql sql vb.net

我遇到了一些问题,当我从我的vb.net程序查询我的mysql数据库时,数据被发送,但是它遗漏了一些东西,让我解释一下。

我的查询非常简单我正在向我的数据库发送一个文件路径,以便在我可以拥有一个php网站获取数据并与我的数据库中的数据建立链接,但是当我发送数据时结果看起来像这样...

    \server_pathappsInst_pcLicences_ProceduresDivers    estCheck_list.doc

应该看起来像

    \\server_path\apps\Inst_pc\Licences_Procedures\Divers\test\Check_list.doc

我不知道我的代码是不是很好,或者我的mysql服务器上的配置是否有帮助......

这是我的代码

    'Construct the sql command string 
        cmdString = "INSERT into procedures(Nom, Lien_Nom, Commentaires) VALUES('" & filenameOnly_no_space_no_accent & "', '" & str_Lien_Nom_Procedure & "', '" & str_commentaires_Procedure & "')"

        ' Create a mysql command 
        Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(cmdString, conn)

        Try
            conn.Open()
            cmd.ExecuteNonQuery()
            conn.Close()
        Catch ex As MySqlException
            MsgBox("Error uppdating invoice: " & ex.Message)
        Finally
            conn.Dispose()
        End Try

抱歉,我接到了电话,可以继续发表评论,所以其余的就是:X

嗯,我想这可行,但我的程序从未使用相同的路径,因为在服务器上传文件,所以这次我想上传的文件就是这条路径

      \\Fsque01.sguc.ad\apps\Inst_pc\Licences_Procedures\Divers\test\Check_list.doc 

但下次它将成为别的东西所以我不能硬编码路径,我看起来更多的是我可能不知道的SQL查询,因为我已经考虑过搜索我的字符串以及它是否找到了反斜杠它增加了另一个,但我觉得它不是编写整个事情的好方法......

无论如何,非常感谢你的帮助

3 个答案:

答案 0 :(得分:0)

使用双反斜杠而不是单反斜杠

答案 1 :(得分:0)

构造插入SQL时,它没有反斜杠转义。例如:

INSERT into procedures(Nom, Lien_Nom, Commentaires) VALUES('\\server_path\apps\Inst_pc\Licences_Procedures\Divers\test\Check_list.doc

反斜杠需要像:

一样进行转义
INSERT into procedures(Nom, Lien_Nom, Commentaires) VALUES('\\\\server_path\\apps\\Inst_pc\\Licences_Procedures\\Divers\\test\\Check_list.doc

你可以用类似的东西(不确定VB.NET)来做到这一点:

filenameOnly_no_space_no_accent = filenameOnly_no_space_no_accent.Replace("\\", "\\\\")

您还应该查看参数化查询,它们可以保护您免受某些SQL注入攻击,并且与拼接在一起的SQL相比更容易编写和维护(这是未经过测试的,我不熟悉MySQL参数化查询如此YMMV):

cmdString = "INSERT into procedures(Nom, Lien_Nom, Commentaires) VALUES(?nom, ?lien_nom, ?commentaires)"
Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(cmdString, conn)
cmd.Parameters.Add("?nom", filenameOnly_no_space_no_accent.Replace("\\", "\\\\"))
cmd.Parameters.Add("?lien_nom", str_Lien_Nom_Procedure)
cmd.Parameters.Add("?commentaires", str_commentaires_Procedure)

这是基于我在this tutorial的末尾找到的内容。

答案 2 :(得分:0)

   cmdString = "INSERT into procedures(Nom, Lien_Nom, Commentaires) VALUES(?nom,?Lien_Nom,?Commentaires)"

        ' Create a mysql command 
        Dim cmd As New MySqlCommand(cmdString, conn)
        cmd.Parameters.AddWithValue("?nom", filenameOnly_no_space_no_accent)
        cmd.Parameters.AddWithValue("?Lien_Nom", str_Lien_Nom_Procedure)
        cmd.Parameters.AddWithValue("?Commentaires", str_commentaires_Procedure)


        Try
            conn.Open()
            cmd.ExecuteNonQuery()
            conn.Close()
        Catch ex As MySqlException
            MsgBox("Error uppdating invoice: " & ex.Message)
        Finally
            conn.Dispose()
        End Try