0

使用 taglib-sharp 和 OleDb,我正在尝试索引音乐文件的文件夹并将所述文件中的所有元数据存储在 Access 数据库中(我可能稍后会切换到 SQL Compact 或其他东西,但我拥有的书使用 Access) . 以下代码应检索并存储给定文件夹和子文件夹中的前 1000 个文件的元数据

OleDbCommand cmd = con.CreateCommand();
DirSearch(@"C:\Users\Stephen\Music");
TagLib.File tagFil;

for (int i = 0; i < 1000; i++)
        {
            tagFil = TagLib.File.Create(filesFound[i]);
            string album = tagFil.Tag.Album;
            string artist = tagFil.Tag.FirstPerformer;
            string title = tagFil.Tag.Title;

            if (album == null)
                album = "Unknown Album";
            if (artist == null)
                artist = "Unknown Artist";
            if (title == null)
                title = "Unknown Track";
            cmd.CommandText = "INSERT INTO Track (Title,Artist,Album,Path) VALUES ('" + title + "','" + artist + "','" + album + "','" + filesFound[i] + "')";
            cmd.ExecuteNonQuery();
        }

但是,当其中一个标签的标题中有方括号时,就会出现问题。我可以看到为什么这会导致问题,但不知道如何解决/避免它。我尝试过字符串文字等,但看不到它们是如何工作的(它们没有:/)。有更好的想法吗?

4

1 回答 1

2

您应该使用参数化查询来完成此操作。

未经测试的代码:

cmd.CommandText = "INSERT INTO Track (Title,Artist,Album,Path) VALUES (?, ?, ?, ?)";
cmd.Parameters.Add(title);
cmd.Parameters.Add(artist);
cmd.Parameters.Add(album);
cmd.Parameters.Add(filesFound[i]);

链接:http:
//msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

按原样,您的代码对于 SQL 注入已经成熟......

于 2011-09-18T03:53:46.073 回答