我无法想出允许将字符串或NULL传递给数据库的正确语法.这是我的代码:
string insertString = String.Format( @"INSERT INTO upload_history (field1, field2, field3) VALUES ('{0}', '{1}', '{2}')", varField1, varField2, varField3);
我在变量占位符周围使用单引号,以便数据库正确接受字符串值.但是,如果传递NULL,它最终会以字符串"NULL"进入数据库.
有没有办法可以将单引号从InsertCommand字符串中删除并有条件地将单引号添加到我的变量中?
不要连接string(string.Format
) - 使用参数(@p1
等) - 然后你可以传递DBNull.Value
给SQL Server的null
SqlCommand cmd = new SqlCommand(); cmd.CommandText = @"INSERT INTO upload_history (field1, field2, field3) VALUES (@p1, @p2, @p3)"; cmd.Parameters.AddWithValue("@p1", (object)someVar ?? DBNull.Value); //...
这也可以保护您免受SQL注入
使用String.Format集中字符串可能会带来很大的安全风险(SQL注入),如果要插入'字符,也会出现问题.
解:
cmd.CommandText = "INSERT INTO upload_history (field1, field2, field3) " + "VALUES (@p1, @p2, @p3)"; cmd.Parameters.AddWithValue("@p1", varField1); cmd.Parameters.AddWithValue("@p2", varField2); cmd.Parameters.AddWithValue("@p3", varField3); cmd.ExecuteNonQuery();