2013-02-18 2 views
1

Я хочу вставить строку «xxx'xxx» в поле таблицы. Проблема в «характере». Как я могу вставить этого персонажа?Вставить ошибку в postgresql DB с C#

+0

Почему близкие голоса, это простой, понятный и правильный вопрос с простыми ответами. – Johan

ответ

1

двойной single quote при вставке непосредственно,

INSERT INTO tableName (colName) VALUES ('xxx''xxx') 

, но если вы делаете это на C#, использовать параметризованный запрос.

string connStr = "connection String here"; 
string val = "xxx'xxx"; 
string query = "INSERT INTO tableName (colName) VALUES (:val)"; 
using(NpgsqlConnection conn = new NpgsqlConnection(connStr)) 
{ 
    using(NpgsqlCommand comm = new NpgsqlCommand()) 
    { 
     comm.Connection = conn; 
     comm.CommandText = query; 
     NpgsqlParameter p = new NpgsqlParameter("val", NpgsqlDbType.Text); 
     p.value = val; 
     comm.Parameters.Add(p); 
     try 
     { 
      conn.Open(); 
      comm.ExecuteNonQuery(); 
     } 
     catch(NpgsqlException e) 
     { 
      // do something with 
      // e.ToString(); 
     } 
    } 
} 
+0

(: val) <- shouldnt, что будет @val – Zaki

+0

@ Sam1 Я думаю, ':' также поддерживается. –

+0

метод AddWithValue() не существует .. –

4

Вы должны дублировать одинарную кавычку:

insert into foo (col_name) 
values 
('xxx''xxx'); 

Но вы должны смотреть на подготовленные заявления, которые не только делают такие вещи, как, что намного проще, но также будет защищать вас от инъекции SQL (я не знаю C#, поэтому я не могу помочь вам в деталях).

1

В C# Если вы хотите, чтобы вставить одинарную кавычку вы можете сделать это, заменив первоначальное значение так:

string x = "xxx'xxx"; 
string replacedText = x.Replace("'","''"); 

и при вставке для предотвращения SQL инъекций всегда использовать Параметры:

myCommand.CommandText = "INSERT INTO TableName (x) VALUES (@x)"; 
myCommand.Parameters.Add("@x", x); 
Смежные вопросы