在C#中安全地生成SQL查询

Dan*_*ens 16 c# sql

在C#中生成SQL查询最安全的方法是什么,包括清理用户输入以便注入安全?我希望使用一个不需要外部库的简单解决方案.

Gui*_*e86 22

使用Sql参数:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter(v=vs.80).aspx

这是C#中的一个例子

SqlCommand tCommand = new SqlCommand();
tCommand.Connection = new SqlConnection("YourConnectionString");
tCommand.CommandText = "UPDATE players SET name = @name, score = @score, active = @active WHERE jerseyNum = @jerseyNum";

tCommand.Parameters.Add(new SqlParameter("@name", System.Data.SqlDbType.VarChar).Value = "Smith, Steve");
tCommand.Parameters.Add(new SqlParameter("@score", System.Data.SqlDbType.Int).Value = "42");
tCommand.Parameters.Add(new SqlParameter("@active", System.Data.SqlDbType.Bit).Value = true);
tCommand.Parameters.Add(new SqlParameter("@jerseyNum", System.Data.SqlDbType.Int).Value = "99");

tCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

  • 不,不是.它只是在视线中,而不是隐藏在一堆自动生成的代码下,所以你不必费心学习它是如何工作的. (2认同)

Ton*_*son 5

本质上不要这样做

SqlCommand command = new SqlCommand(MyConnection);
command.CommandText = "Select * From MyTable Where MyColumn = '" + TextBox1.Text + "'"
...
Run Code Online (Sandbox Code Playgroud)

SqlCommand command = new SqlCommand(MyConnection);
command.CommandText = "Select * From MyTable Where MyColumn = @MyValue";
command.Parameters.AddWithValue("MyValue",TextBox1.Text);
...
Run Code Online (Sandbox Code Playgroud)

基本上永远不会直接从用户输入构建您的sql命令.

如果您使用ORM,例如EntityFrameworks/POCO,则所有查询都以后一种形式完成.