gpt4 book ai didi

c# - 在 C# 中使用 mySQL 转义逗号、冒号和单引号

转载 作者:行者123 更新时间:2023-11-29 21:49:32 26 4
gpt4 key购买 nike

--- 这是供个人使用的,所以不用担心 SQL 注入(inject) ---

我已经浏览了一些关于 mySQL 转义为 C# 的教程,但找不到适合我的教程(也许我只是错误地使用了它)

我正在尝试将数据插入 mySQL 数据库。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;
using System.Net;
using System.IO;
using System.Security.Cryptography;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace HASHSITE
{
class Program
{
static void Main(string[] args)
{
bool success;
int done = 0;

string path = @"C:\Users\somePC\Documents\someFolder\somefile.txt";

string server = "someIP";
string database = "some_db";
string uid = "some_dbu";
string password = "pass";
string connectionstring = "SERVER=" + server + ";DATABASE=" + database + ";UID=" + uid + ";PASSWORD=" + password + ";";

using (var connection = new MySqlConnection(connectionstring))
{
connection.Open();
using (var cmd = new MySqlCommand("INSERT INTO databases(data) VALUES(@name)", connection))
{
var parameter = cmd.Parameters.Add("@name", MySqlDbType.LongText);
foreach(string line in File.ReadLines(path))
{
success = false;
while (!success)
{
parameter.Value = line;
cmd.ExecuteNonQuery(); //ERROR IS HERE
success = true;
}
done += 1;
Console.WriteLine("\n" + done);
}
}
}
}
}
}

我需要转义字符串行中存在的逗号

name,name@name.com

错误:

Additional information: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'databases(data) VALUES

最佳答案

不要尝试转义任何内容 - 只需使用参数化 SQL。您现在可能不关心 SQL 注入(inject)攻击,但您会在某个点...通过对您的值使用参数化 SQL,您将删除转义的注入(inject)攻击问题。哦,您将减少类型转换的问题。并使您的 SQL 更具可读性。这是全面的胜利。

请注意,DATABASESreserved word ,所以您确实需要引用它 - 或者将表的名称更改为不会那么尴尬的名称。

// TODO: Specify the column name as well, for clarity if nothing else
cmd.CommandText = "INSERT INTO 'databases' VALUES(@name)";
// Adjust for your actual type
cmd.Parameters.Add("@name", MySqlDbType.LongText).Value = line;
...

请注意,您只想调用 cmd.Parameters.Add 一次,因此在您使用循环的情况下,您可能需要调用它(并设置命令文本)在循环外部,然后只需在循环内部设置 Value 属性即可。

当有疑问时,请养成尽早做正确事情的习惯,而不是假设以后会找到时间改掉坏习惯。

当您这样做时,现在是开始使用 using 语句的好时机...并且您可以重用几乎所有内容,只需在每次迭代时更改参数值即可:

using (var connection = new MySqlConnection(...))
{
connection.Open();
using (var command = new MySqlCommand("INSERT INTO 'databases' VALUES(@name)", connection)
{
var parameter = command.Parameters.Add("@name", MySqlDbType.LongText);
foreach (...)
{
parameter.Value = line;
command.ExecuteNonQuery();
}
}
}

关于c# - 在 C# 中使用 mySQL 转义逗号、冒号和单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com