我有以下代码,它遍历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();
}
我现在遇到的问题是,如果其中一个专栏中的'
文章中我的应用程序崩溃了。
避免这个问题的最佳方法是什么?
答案 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'''
。