将值插入包含括号/大括号的Access数据库

时间:2011-09-18 03:48:37

标签: c# ms-access oledb taglib taglib-sharp

使用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();
        }

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

1 个答案:

答案 0 :(得分: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注入...