Вставьте значения в базу данных Access, которая содержит скобки - PullRequest
0 голосов
/ 18 сентября 2011

Используя 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();
        }

Однако проблема возникает, когда один из тегов имеет квадратную скобку в заголовке.Я понимаю, почему это может вызвать проблему, но не то, как ее решить / избежать.Я пробовал строковые литералы и т. Д., Но не мог видеть, как они будут работать (они не: /).Есть идеи получше?

1 Ответ

2 голосов
/ 18 сентября 2011

Для этого следует использовать параметризованные запросы.

Непроверенный код:

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-инъекций ...

...