我无法想出允许将字符串或NULL传递给数据库的正确语法.这是我的代码:
string insertString = String.Format(
@"INSERT INTO upload_history (field1, field2, field3)
VALUES ('{0}', '{1}', '{2}')",
varField1, varField2, varField3);
Run Code Online (Sandbox Code Playgroud)
我在变量占位符周围使用单引号,以便数据库正确接受字符串值.但是,如果传递NULL,它最终会以字符串"NULL"进入数据库.
有没有办法可以将单引号从InsertCommand字符串中删除并有条件地将单引号添加到我的变量中?
Mar*_*ell 22
不要连接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);
//...
Run Code Online (Sandbox Code Playgroud)
这也可以保护您免受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();
Run Code Online (Sandbox Code Playgroud)