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

ただし、この問題は、タグの1つにタイトルに角かっこが含まれている場合に発生します。これが問題を引き起こす理由はわかりますが、解決/回避する方法はわかりません。文字列リテラルなどを試しましたが、どのように機能するかわかりませんでした(:/ではありません)。より良いアイデアはありますか?

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 に答える