什么是向SQL传递参数,为什么需要它?初学者:在我对如何将数据插入SQLServer的问题的回答中,他提到传递参数而不是像我现在这样的字符串连接。这真的是安全所必需的吗?如果是这样,传递的参数到底是什么?当我用谷歌搜索时,我得到了很多关于存储过程的信息。这就是我想要的,我不知道存储过程....如果你能指出正确的方向,我将不胜感激。谢谢。编辑:好的,这就是我得到的。它似乎正确地更新了数据库,我最终将硬编码的int更改为标签的输入。请确认我是如何做到这一点的,这样它就不会受到任何SQL注入或攻击。使用系统;使用System.Collections.Generic;使用System.Linq;使用System.Web;使用System.Web.UI;使用System.Web.UI.WebControls;使用System.Web.Security;使用系统数据;使用System.Data.Sql;使用System.Data.SqlClient;publicpartialclassStats:System.Web.UI.Page{publicSqlDataReaderDataReader;公共SqlCommand命令;stringqueryString=("INSERTINTOUserData(UserProfileID,ConfidenceLevel,LoveLevel,HappinessLevel)VALUES(@UID,@CL,@LL,@HL);");//stringqueryString=("INSERTINTOUserData(UserProfileID,ConfidenceLevel,LoveLevel,HappinessLevel)VALUES('a051fc1b-4f51-485b-a07d-0f378528974e',2,2,2);");protectedvoidPage_Load(objectsender,EventArgse){LabelUserID.Text=Membership.GetUser().ProviderUserKey.ToString();}protectedvoidButton1_Click(objectsender,EventArgse){//连接到数据库MySqlConnectiondatabase=newMySqlConnection();数据库.CreateConn();//创建命令对象逗号nd=newSqlCommand(queryString,database.Connection);//添加参数。用于防止sql注入Command.Parameters.Add("@UID",SqlDbType.UniqueIdentifier);Command.Parameters["@UID"].Value=Membership.GetUser().ProviderUserKey;Command.Parameters.Add("@CL",SqlDbType.Int);命令.参数["@CL"].Value=9;Command.Parameters.Add("@LL",SqlDbType.Int);命令.参数["@LL"].Value=9;Command.Parameters.Add("@HL",SqlDbType.Int);命令.参数["@HL"].Value=9;命令。执行非查询();将参数传递给SQL使您不必构建动态SQL字符串构建动态SQL语句是一个巨大的安全风险,因为人们可以将他们自己的SQL代码注入到您的应用程序中,可能针对您的数据执行不需要命令。以下是可能的SQL注入攻击的一些很好的示例:SQL注入攻击示例有两种方法可以将参数传递给SQL语句。一种是使用您提到的存储过程。另一种是使用参数化查询(这实际上是我更喜欢的)。在.NET中,参数化查询实际上非常简单:命令.参数。Add(newSqlParameter("@Username","JustinNiessner"));SqlDataAdapter适配器=newSqlDataAdapter(命令);DataTabledt=newDataTable();适配器.填充(dt);本例中参数为@Username,我们使用SqlCommand对象的Parameters集合来传值。它会保护您免受Bobby小桌子的伤害。http://xkcd.com/327/下面是一个例子:SqlConnectionmyConn=newSqlConnection("myconnectionstring");SqlCommandmyCmd=newSqlCommand("myStoredProcName",myConn);myCmd.CommandType=CommandType.StoredProcedure;myCmd.Parameters.AddWithValue("@cGroupID",0).Di??rection=ParameterDirection.InputOutput;myCmd.Parameters.AddWithValue("@gType","C");myCmd.Parameters.AddWithValue("@requirement","Y");myCmd.Parameters.AddWithValue("@usercode","XX");myConn.Open();myCmd.ExecuteNonQuery();intcovID=(int)myCmd.Parameters["@cGroupID"].Value;使用参数是防止某些错误并有助于阻止注入向量的好方法。它还允许输出参数,如上例所示,其中cGroupID返回一个我可以访问的值。简单连接字符串的主要问题是它经常使您容易受到SQL注入攻击。GoogleSQL注入或在此处阅读。除了SQL注入之外,参数化查询在SQL服务器看来总是一样的。查询执行计划很可能会被缓存,因此如果再次发送相同的查询,它会运行得更快。如果您在循环中多次运行相同的查询,或者如果您有许多客户端查询服务器,这将非常明显。以上就是C#学习教程:什么是给SQL传参,为什么需要传参?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
