Ну, я уже видел некоторые сообщения на этот счет, и лучший ответ, который я смог найти, это использовать Параметры , но в моем случае это невозможно:
Я создал отдельную библиотеку, которая отправляетзапросы к 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 (), для отправки списка полей для установки.