嗯,我已经看到了一些关于此的帖子,我能找到的最佳答案是使用 Parameters ,但就我而言不可能:
我制作了一个单独的库,用于向 MySQL 或 MSSQL 发送请求,具有以下功能:
public long Insert(string query)
{
if (this.OpenConnection() == true)
{
if (isMySQL)
{
MySqlCommand cmd = new MySqlCommand(query.Replace("[v-steel].", ""), connection);
cmd.ExecuteNonQuery();
long lastId = cmd.LastInsertedId;
this.CloseConnection();
return lastId;
}
else
{
using (SqlCommand command = new SqlCommand(query + "; SELECT SCOPE_IDENTITY () As NewID", MSconnection))
{
SqlDataReader dataReader = command.ExecuteReader();
if (dataReader.HasRows)
{
dataReader.Read();
long lastId = long.Parse(dataReader["NewID"].ToString().Trim());
return lastId;
}
}
}
}
return -1;
}
因此,由于此函数对于任何查询/表都是全局的,因此我无法使用参数。
我最后想要的是能够在我的数据库中发送撇号、逗号等字符...我发现的所有内容都是替换函数或参数,是否有一种“更简单”的方法来实现我的函数插入和更新,所以我确信我永远不会收到错误消息,并且这些字符将被考虑在内。 通常我会遇到发回用户评论的问题,评论里可以写任何东西。
编辑:
第二种可能性是在插入功能中编辑我的请求(在发送查询之前)
发送的请求看起来像这样(在我的具体示例中):
string requete = "INSERT INTO [v-steel].assemblage_avancement_histo(ID_ASS_AV,ID_USER,ID_OP,ID_OP_NEXT,COMM) VALUES(" + this.IdAssAv + "," + this.IdUser + "," + this.IdOp+","+this.IdOpNext+",\'"+this.Comm+"\')";
this.ID=DataBase.Insert(requete);
正如你所理解的,我的问题是在“this.Comm”上遇到的,这是用户留下的评论,我希望允许用户写任何他们想要的东西。
编辑:
根据MarcGravell的评论,我添加了一个新对象ElementInput
public class ElementInput
{
private string field;
public string Field
{
get { return field; }
set { field = value; }
}
private string valeur;
public string Valeur
{
get { return valeur; }
set { valeur = value; }
}
}
然后修改插入函数如下:
public long Insert(string table,List<ElementInput> listElements)
{
if (this.OpenConnection() == true)
{
if (isMySQL)
{
string query = "INSERT INTO [v-steel]." + table + "(";
for(int i=0;i<listElements.Count();i++)
{
if(i>0)
{
query += ",";
}
query += listElements[i].Field;
}
query += ") values (";
for (int i = 0; i < listElements.Count(); i++)
{
if (i > 0)
{
query += ",?valeur"+i;
}
else
{
query += "?valeur"+i;
}
}
query += ")";
MySqlCommand cmd= new MySqlCommand(query.Replace("[v-steel].", ""), connection);
for(int i=0;i< listElements.Count(); i++)
{
cmd.Parameters.Add(new MySqlParameter("valeur"+i, listElements[i].Valeur));
}
cmd.ExecuteNonQuery();
long lastId = cmd.LastInsertedId;
this.CloseConnection();
return lastId;
}
else
{
//same thing for MSSQL
}
}
return -1;
}
剩下的唯一一件事就是编辑我调用 Insert() 的所有函数,以发送要设置的字段列表。
最佳答案
将 ' 替换为 '' ,即 this.Comm.Replace("'", "''")
string requete = "INSERT INTO [v-steel].assemblage_avancement_histo(ID_ASS_AV,ID_USER,ID_OP,ID_OP_NEXT,COMM) VALUES(" + this.IdAssAv + "," + this.IdUser + "," + this.IdOp+","+this.IdOpNext+",\'"+this.Comm.Replace("'", "''")+"\')";
this.ID=DataBase.Insert(requete);
关于c# - 如何将包含特殊字符的 C# 字符串传递给 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285500/