当前位置:  开发笔记 > 编程语言 > 正文

将字符串或NULL插入SQL Server数据库时出现问题

如何解决《将字符串或NULL插入SQLServer数据库时出现问题》经验,为你挑选了2个好方法。

我无法想出允许将字符串或NULL传递给数据库的正确语法.这是我的代码:

string insertString = String.Format(
    @"INSERT INTO upload_history (field1, field2, field3) 
    VALUES ('{0}', '{1}', '{2}')",
    varField1, varField2, varField3);

我在变量占位符周围使用单引号,以便数据库正确接受字符串值.但是,如果传递NULL,它最终会以字符串"NULL"进入数据库.

有没有办法可以将单引号从InsertCommand字符串中删除并有条件地将单引号添加到我的变量中?



1> Marc Gravell..:

不要连接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注入


@buzzzzjay在其中任何一个前面添加一个``(object)`.

2> Stefan Schul..:

使用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();

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有