2011-09-18 85 views
0

使用taglib-sharp和OleDb,我试图索引音乐文件的文件夹并将所有文件的所有元数据存储在Access数据库中(我可能会切换到SQL Compact或稍后的东西,但我已经使用Access的书)。下面的代码应检索和第1000个文件的元数据存储在一个给定文件夹和子文件夹将值插入包含括号/大括号的Access数据库

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

的问题,但是,发生在标签中的一个在标题的支架。我可以看到为什么这会导致问题,而不是如何解决/避免它。我已经尝试过字符串等,但无法看到他们将如何工作(他们不:/)。任何更好的想法?

回答

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注入...

+0

容易被看到我新的与这些数据库吧?非常感谢 :) – stephenfin