【发布时间】:2018-08-27 22:34:53
【问题描述】:
我正在做一个项目,我在字符串类中使用 mp3 歌曲的元数据。这些是我想要复制到 mySQL 数据库(来自我从数据中创建的列表)中的数据(即艺术家、标题等),我有下一个查询:
SELECT * FROM database.tablename WHERE artist='"+song[i].artist+ "' AND title='" + song[i].title + "' AND genre='"+song[i].genre+"';
代码完美运行(知道成功复制了 12 行),直到 for 循环到达一首包含撇号 (') 的歌曲,它在给定符号处出现语法错误而退出。例如:song[i].title 是我不是她。我尝试了我能想象的一切:
- 我尝试将 ' 替换为 string.empty
- 试图替换为“”
- 甚至尝试替换为“''”(2 个撇号),以便查询可以识别撇号,但似乎没有任何帮助(总是出现相同的语法错误,例如即使没有替换)
这是一行,所以你可以看看我是如何尝试的:
song[i].artist = song[i].artist.Replace("'","");
所以我的问题是:有什么解决方案可以去掉撇号,或者有什么方法可以使查询工作吗?
编辑:这是我的原始代码(只有 for 循环)以便更好地理解。
for (int i = 0; i < Array.Length; i++)
{
Command = @"SELECT * FROM database.tablename WHERE artist='"+song[i].artist+ "' AND title='" + song[i].title + "' AND genre='"+song[i].genre+"';";
MySqlCommand myCommand = new MySqlCommand(Command);
using (MySqlConnection mConnection = new MySqlConnection(ConnectionString.ToString()))
{
adapter = new MySqlDataAdapter(Command,mConnection);
mConnection.Open();
adapter.Fill(dataset);
int adat = dataset.Tables[0].Rows.Count;
if (adat <= 0) //if current data does not exist
{
song[i].artist = song[i].artist.Replace("'","\'");
song[i].title = song[i].title.Replace("'", "\'");
song[i].genre = song[i].genre.Replace("'", "\'");
myCommand = new MySqlCommand("INSERT INTO database.tablename (artist,title,length,genre) VALUES ('"+song[i].artist+"','"+song[i].title+"','"+song[i].length+"','"+song[i].genre+"');",mConnection);
myCommand.ExecuteNonQuery();
dataset.Clear();
}
mConnection.Close();
}
}
这就是我“使用”的东西(抱歉,不知道如何让它看起来合适):
使用系统; 使用 System.Collections.Generic; 使用 System.ComponentModel; 使用 System.Data; 使用 System.Drawing; 使用 System.Linq; 使用 System.Text; 使用 System.Threading.Tasks; 使用 System.Windows.Forms; 使用 System.IO; 使用标签库; 使用 TagLib.Id3v2; 使用 System.Configuration; 使用 System.Data.SqlClient; 使用 MySql; 使用 MySql.Data; 使用 MySql.Data.MySqlClient; 使用 Programname.Properties;
【问题讨论】:
-
尝试使用您正在使用的任何技术查找“参数化查询”(您没有显示实际代码,所以不知道您正在使用哪些库,或者我会将您链接到一个)。除了其他几个好处之外,它们还可以让您将字符串放入数据库中,无论格式如何。
-
也许这个link 会帮助你,用“'”引用的字符串中的“'”可以写成“''”。
-
双撇号应该可以。您是否复制了正在生成值的 sql 查询并在 mysql 中运行它以查看它是否在那里工作?
-
你试过了吗:Field.Replace("'", "''")
-
清关: 1. 我在 MySQL 工作台中测试了查询,它与其他数据库一起工作没有问题。 2. 因为我写了 90% 的 mp3 元数据,所以我很清楚它是一个撇号
标签: c# .net string replace apostrophe