Получение синтаксической ошибки с оператором INSERT INTO - PullRequest
0 голосов
/ 05 июня 2018

Я получаю сообщение об ошибке «Ошибка синтаксиса C # в операторе INSERT INTO» для этой части кода ниже:

public static void SaveCurrentPlaylistToSheet(YouTubeVideo[] CurrentPlaylist, string playlistTitle)
{
    ActiveSheetTitle = "Test"; //playlistTitle;
    string currentTitle;

    if (FileCreation)
    {
        NewPlaylist = true;
    }

    using (conn = new OleDbConnection(ConnectionString))
    {
        conn.Open();
        try
        {
            cmd = new OleDbCommand();
            cmd.Connection = conn;

            currentTitle = "Test";

            for (int i = 0; i < CurrentPlaylist.Length; i++)
            {
                //currentTitle = Regex.Replace(CurrentPlaylist[i].title, " ", "");
                //currentTitle = currentTitle.Replace(",", "");

                using (cmd = conn.CreateCommand())
                {
                    if (NewPlaylist)
                    {
                        NewPlaylist = false;
                        cmd.CommandText = "INSERT INTO [" + ActiveSheetTitle + "$] (F1) VALUES (?)";
                    }
                    else
                    {
                        cmd.CommandText = "INSERT INTO [" + ActiveSheetTitle + "] (F1) VALUES (?)";
                    }
                    cmd.Parameters.Add("?", OleDbType.VarChar).Value = currentTitle;

                    cmd.ExecuteNonQuery(); 
                }
            }
        }
        catch (Exception ex)
        {
            string filePath = @"C:\Dropbox\amitai\Programming\C# projects\Youtube Playlists\Error.txt";

            using (StreamWriter writer = new StreamWriter(filePath, true))
            {
                writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
                   "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
                writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
            }
        }

        cmd = null;
        conn.Close();
        cmd.Dispose();
        conn.Dispose();
    }

    ActiveSheetTitle = null;
}

Подробности строки подключения:

ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=
                    " + MyPath + ";" +
                    "Mode=ReadWrite;" + "Mode=ReadWrite;" + //ReadOnly=false" +
                    "Extended Properties=\"Excel 12.0;HDR=NO; IMEX =1;\"";        

и "myPath" извлекается из:

public static string MyPath { get; set; } = @"\MyPlaylists.xlsx";
...

using (var dialog = new FolderBrowserDialog())
{
    dialog.Description = "Please choose directory";
    if (dialog.ShowDialog() == DialogResult.OK)  //check for OK. They might press cancel, so don't do anything if they did.
    {
        string path = dialog.SelectedPath;
        MyPath = path + MyPath;
    }
}

Путем поиска в Google я нашел решения для этой ошибки, которые связаны с использованием зарезервированных ключевых слов в качестве параметров или получением некоторого ввода пространства, поэтому для целей тестирования я установилcurrentTitle и ActiveSheetTitle как «Test», но ошибка остается.

Любая помощь для решения проблемы будет принята.

1 Ответ

0 голосов
/ 07 июня 2018

Спасибо за помощь.С помощью комментариев по этому вопросу я выяснил, что возникает исключение, поскольку файл на данном этапе не существует.Надеюсь, это поможет кому-то столкнуться с подобной проблемой.

...