MySQL Операция вставки завершается неудачно с синтаксической ошибкой - PullRequest
0 голосов
/ 20 июня 2020

Сегодня я хотел написать код, который сканирует все файлы в папке «Документы» пользователя, берет текст и имена файлов и помещает их в базу данных (просто как своего рода тест, если бы я мог это сделать, а не для получения данных). Но если он вставляет контент в базу данных, моя программа сообщает, что есть синтаксическая ошибка с текстом в файлах в моей папке документов.

Мой код:

using System;
using MySql.Data.MySqlClient;
using System.IO;

namespace HelloWorld
{
    class Program
    {
        static void
        Main(string[] args)
        {
            Console.WriteLine("Getting Connection ...");

            var datasource = @"localhost";//your server
            var database = "database"; //your database name
            var username = "username"; //username of server to connect
            var password = "password"; //password

            //your connection string 
            string connStr = $"Server={datasource};Database={database};Uid={username};Pwd={password}";
            //create instanace of database connection
            using (var conn = new MySqlConnection(connStr))
            {
                try
                {
                    Console.WriteLine("Openning Connection ...");

                    //open connection
                    conn.Open();

                    Console.WriteLine("Connection successful!");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
                string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                var txtFiles = Directory.EnumerateFiles(path, "*.*");
                foreach (string currentFile in txtFiles)
                {
                    string currentfile_txt = File.ReadAllText(currentFile);
                    var stm = $"INSERT INTO file_contents(File_Name, File_Content) VALUES ({currentFile}, {currentfile_txt});";
                    var cmd = new MySqlCommand(stm, conn);
                    cmd.ExecuteNonQuery();
                }

            }
        }
    }
}

Но если я его запускаю, он дает мне эту ошибку:

Необработанное исключение. MySql .Data.MySqlClient.MySqlException (0x80004005): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с ': \ Users \ 49176 \ Documents \ aaa.txt,)' в строке 1

Кажется, что он обрабатывает текст в aaa.txt как SQL Код. Как я могу это изменить? (кстати: в txt файле всего несколько случайных букв)

Надеюсь, вы мне поможете

1 Ответ

3 голосов
/ 20 июня 2020

В вашей проблеме отсутствуют кавычки

var stm = $"INSERT INTO file_contents(File_Name, File_Content) 
            VALUES ('{currentFile}', '{currentfile_txt}');";

Но лучше сделать это

var stm = $"INSERT INTO file_contents(File_Name, File_Content) VALUES (@1, @2);";
var cmd = new MySqlCommand(stm, conn);
cmd.Parameters.AddWithValue("@1", "temp")
cmd.Parameters.AddWithValue("@2", "temp")

foreach (string currentFile in txtFiles)
{
    cmd.Parameters[0].Value = currentFile;
    cmd.Parameters[1].Value = File.ReadAllText(currentFile);
    cmd.ExecuteNonQuery();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...