2011-09-18 109 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