当我们想像int
我们使用(%d)一样将某物传递给数据库时,如下所示
...string.format("select * from Table where code=%d",100)...
%d
当我们想通过时,我应该使用什么来代替dateTime
?
当我们想像int
我们使用(%d)一样将某物传递给数据库时,如下所示
...string.format("select * from Table where code=%d",100)...
%d
当我们想通过时,我应该使用什么来代替dateTime
?
不要使用 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.
}
除了@Ravi 的回答。
你应该避免像这样连接你的 SQL 查询,因为它会允许SQL 注入。
在您的情况下,我会考虑使用 ORM(实体框架、NHibernate、Dapper),但如果您只想使用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 = '''
这是不正确的,将引发错误。通过暴露这一点,您可以对您的数据做非常有害的事情!