尝试在 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 插入语句的转义的主要内容,如果未能解决你的问题,请参考以下文章