如何避免列值中的单引号

时间:2014-06-10 21:12:58

标签: c# sql sql-server csv

我有以下代码,它遍历CSV文件并写入SQL表:

foreach (string line in lines.Skip(1))
{
     var sqlfmt = "INSERT INTO [" + tab + "] values ({0})";
     var insert = string.Format(sqlfmt, line.Replace("\"", "'"));

     MessageBox.Show(insert + "");

     SqlCommand ty = new SqlCommand(insert, myConnection);
     ty.ExecuteNonQuery();
}

我现在遇到的问题是,如果其中一个专栏中的'文章中我的应用程序崩溃了。

避免这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

只需更改

var insert = string.Format(sqlfmt, line.Replace("\"", "'"));

要:

var insert = string.Format(sqlfmt, line.Replace("'", "''").Replace("\"", "'"));

原因是在T-SQL(SQL Server的SQL版本)中,字符串中的单引号被另一个单引号转义。例如,如果要正确引用字符串Bob's quotes',则正确转义的SQL字符串将为'Bob''s quotes'''