0

当我们想像int我们使用(%d)一样将某物传递给数据库时,如下所示

...string.format("select * from Table where code=%d",100)...

%d当我们想通过时,我应该使用什么来代替dateTime

4

2 回答 2

7

不要使用 string.format() 进行数据库参数替换,你最终会陷入 SQL 注入。SqlCommand 有Parameters 属性,可以将参数添加到集合中

像这样使用参数化查询:

SqlCommand cmd = new SqlCommand()
cmd.Parameters.AddWithValue("@yourParam",value);

如果在代码中使用 Using 块,效率会更高。

像这样

using(SqlConnection con = new SqlConnection("ConnString"))
using(SqlCommand cmd =  new SqlCommand(con))
{
   // do some stuffs. like add parameters. 
}
于 2012-07-04T10:22:11.680 回答
0

除了@Ravi 的回答。

你应该避免像这样连接你的 SQL 查询,因为它会允许SQL 注入

在您的情况下,我会考虑使用 ORM(实体框架NHibernateDapper),但如果您只想使用SqlCommand,您的查询看起来有点像这样:

using(var connection = new SqlConnection("your connectionstring goes here"))
{
    using(var command = new SqlCommand("select* from Table where code=@dateTime", 
                                                                             connection))
    {
        command.Parameters.AddWithValue("@dateTime", DateTime.Now);

        var reader = command.ExecuteReader();
    }
}

这是来自维基百科的一个示例,它显示了连接 sql 语句的问题:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

如果userName只包含 a会发生什么'

最终的 SQL 语句将如下所示:

SELECT * FROM users WHERE name = '''

这是不正确的,将引发错误。通过暴露这一点,您可以对您的数据做非常有害的事情!

于 2012-07-04T10:33:05.153 回答