【问题标题】:Insert values into an Access Database that contain brackets/braces将值插入到包含括号/大括号的 Access 数据库中
【发布时间】:2011-09-18 03:48:37
【问题描述】:

使用 taglib-sharp 和 OleDb,我正在尝试索引音乐文件的文件夹并将所述文件中的所有元数据存储在 Access 数据库中(我可能稍后会切换到 SQL Compact 或其他东西,但我有这本书使用访问)。下面的代码应该检索并存储给定文件夹和子文件夹中前 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();
        }

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

【问题讨论】:

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


    【解决方案1】:

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

    未经测试的代码:

    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 注入已经成熟...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多