2013-02-18 82 views

回答

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)< - 不应该是@val – Zaki 2013-02-18 14:26:27

+0

@ Sam1我认为':'也被支持。 – 2013-02-18 14:28:20

+0

AddWithValue()方法不存在.. – 2013-02-18 14:31:09

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);