Строковое поле с одинарной кавычкой вызывает ошибку при вставке записи в таблицу

У меня есть код ниже:

query = "insert into tblB2B_OrderStatusTopStillInRB (LSRNbr, ShipName, Units, DroppedInRB, EPT, Status, OnTimeStatus, ShipVia, DroppedInRB_Order, RealEPT) "; query += "values ('" + ListOrdStatusTopInRB[i].LSRNbr + "','" + ListOrdStatusTopInRB[i].ShipName + "'," + ListOrdStatusTopInRB[i].Units + ",'" + ListOrdStatusTopInRB[i].DroppedInRB + "','" + ListOrdStatusTopInRB[i].EPT + "','" + ListOrdStatusTopInRB[i].Status + "','" + ListOrdStatusTopInRB[i].OnTimeStatus + "','" + ListOrdStatusTopInRB[i].ShipVia + "','" + ListOrdStatusTopInRB[i].DroppedInRB_Order + "','" + ListOrdStatusTopInRB[i].RealEPT + "')"; cmd.CommandText = query; cmd.ExecuteNonQuery(); 

И я просто понял, что, когда ShipName имеет значение с одной меткой кавычек, вызывает ошибку в инструкции insert, например: int'l Transp.

Есть ли способ исправить это, не удаляя одинарной кавычки из строки?

Я пытался использовать следующее, но не работал:

 cmd.CommandText = @query + @ListOrdStatusTopInRB[i].ShipName + "'," 

Есть идеи?

Есть ли способ исправить это, не удаляя одинарной кавычки из строки?

Да – вместо этого используйте параметризованный SQL. Вы никогда не должны использовать значения переменных непосредственно в своем SQL, как это. Он может разрешать атаки SQL-инъекций , вызывать проблемы с конверсией и, как правило, сделать SQL более запутанным для чтения.

См. Документацию для SqlCommand.Parameters для примера параметризованного SQL.

В принципе, идея состоит в том, что ваш SQL содержит ссылки на параметры, например

 INSERT INTO SomeTable(Foo, Bar) VALUES (@Foo, @Bar) 

а затем укажите значения для @Foo и @Bar отдельно. Значения тогда не являются частью самого SQL, поэтому не имеет значения, содержат ли они символы, которые будут иметь особое значение в SQL.