尝试在 C# 中添加反斜杠作为 MySql 插入语句的转义

Posted

技术标签:

【中文标题】尝试在 C# 中添加反斜杠作为 MySql 插入语句的转义【英文标题】:Trying to add backslash in C# as escape for MySql insert statement 【发布时间】:2017-07-08 10:17:21 【问题描述】:

我正在导入 Excel 电子表格以插入 mysql 数据库。这是电子表格中的一条记录:

Loc     Item                 Description
FAB12   0121G00667PDG   PNL  DUCT 27.5"

我正在使用OleDbDataReader 来获取DataTable,这很有效。我遇到的问题是尝试用\" 替换",以便MySql 接受双引号。我正在尝试让 C# 将 27.5" 更改为 27.5\"

感谢您提供的任何帮助。

这是我现在得到的结果:

INSERT INTO test_table2 (Loc, Item, Description) VALUES ("FAB12  
 ","0121G00667PDG","PNL  DUCT 27.5"")

代码如下:

           for (int i = 0; i < dtSheet.Rows.Count; i++)
        
            DataRow dr = dtSheet.Rows[i];
            for (int j = 0; j < dtSheet.Columns.Count; j++)
            
                DataColumn dc = dtSheet.Columns[j];
                if (dr[j].ToString().Contains("\""))
                
                    Console.WriteLine(dr[j].ToString());
                    dr[j].ToString().Replace("\"", "\\\""); 
                  //need the backslash for mysql to escape " 
                  //so trying to get "PNL  DUCT 27.5\""
                    Console.WriteLine(dr[j].ToString());
                

这是根据 Majid 进行的修复。使用准备好的语句允许将双引号插入 MySql 尝试 conn.Open(); cmd.Connection = conn;

            cmd.CommandText = "INSERT INTO test_table2 (Loc, Item, Description) VALUES( @Loc, @Item, @Desc )";
            cmd.Prepare();

            cmd.Parameters.AddWithValue("@Loc", "Loc");
            cmd.Parameters.AddWithValue("@Item", "Item");
            cmd.Parameters.AddWithValue("@Desc", "Desc");

            foreach (DataRow row in dtSheet.Rows)
            
                cmd.Parameters["@Loc"].Value = row[0];
                cmd.Parameters["@Item"].Value = row[1];
                cmd.Parameters["@Desc"].Value = row[2];
                Console.WriteLine(cmd.ToString());

                cmd.ExecuteNonQuery();
            
        

【问题讨论】:

不要这样做。请改用parameterized queries。 我也试过了。根据我对@Koby 的评论,它也不起作用。不知道为什么,但任何一种方法都不会添加反斜杠。 使用参数化查询不需要添加反斜杠。无论如何,你错过的字符串是不可变的(只有返回值会被替换)?但同样,请改用参数。 你是对的@Majid,它有效,我不必为 MySql 添加转义字符。感谢您为我指明正确的方向。 【参考方案1】:

尝试使用:

dr[j].ToString().Replace("\"", @"\"); 

【讨论】:

我试过了,得到了同样的结果。我不确定发生了什么事。似乎没有什么能改变替换的结果。我什至尝试过: .Replace("\"",@"x"); 但在输出 sql 语句中没有什么不同。【参考方案2】:

使用参数或者这个value.Replace("\\","\\\\")

【讨论】:

以上是关于尝试在 C# 中添加反斜杠作为 MySql 插入语句的转义的主要内容,如果未能解决你的问题,请参考以下文章

json_encode 添加反斜杠

在字符串中插入反斜杠时遇到问题

从 c# json 响应中删除双反斜杠

mysql入坑集

MYSQL JSON_SET 添加反斜杠

MySQL Prepared PDO 语句正在删除反斜杠