【问题标题】:MySQL Insert Operation fails with syntax errorMySQL 插入操作失败并出现语法错误
【发布时间】:2020-10-10 05:58:21
【问题描述】:

今天我想编写一个代码来扫描用户的“文档”文件夹中的所有文件,获取文本和文件名并将它们放入数据库(就像某种测试我是否可以这样做,而不是用于获取数据)。但是,如果它将内容插入数据库,我的程序会说我的文档文件夹中的文件中的文本存在语法错误。

我的代码:

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 服务器版本相对应的手册,以在第 1 行的 ':\Users\49176\Documents\aaa.txt, )' 附近使用正确的语法

它似乎将 aaa.txt 中的文本作为 SQL 代码处理。 我该如何改变呢? (顺便说一句:在txt文件中只是一些随机字母)

希望你能帮到我

【问题讨论】:

  • 你应该切换到带参数的prepared statements见stackoverflow.com/questions/16167924/…,这样你的数据输入正确和sql注入证明
  • 如果回答满意,就采纳吧。没有答案的问题不会带来价值,因为其他用户永远不知道答案是否正确,他们可以将其用于他们的目的。

标签: c# mysql sql


【解决方案1】:

您的问题是缺少引号

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2021-12-05
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多