CleanSQLDataGoogle提出了各种关于cleaningwebaccessqueries的讨论,但我找不到任何解决我的问题的内容:Cleaninguserinputdatainac#program。这必须通过可逆转化来完成,而不是通过去除来完成。作为问题的一个简单示例,我不想破坏爱尔兰名字。什么是最好的方法,是否有任何库函数可以做到这一点?这取决于您使用的SQL数据库。例如,如果要在MySQL中使用单引号文字,则需要使用反斜杠、Dangerous:'和转义转义字符文字:'。对于MS-SQL,情况完全不同,danger:'escape:''。以这种方式转义数据时不会删除任何内容,这是一种以文字形式表示控制字符(例如引号)的方式。下面是来自文档的MS-SQL和C#的参数化查询示例:privatestaticvoidUpdateDemographics(Int32customerID,stringdemoXml,stringconnectionString){//更新存储在//xml列中的商店的人口统计数据.stringcommandText="UPDATESales.StoreSETDemographics=@demographics"+"WHERECustomerID=@ID;";使用(SqlConnectionconnection=newSqlConnection(connectionString)){SqlCommand命令=newSqlCommand(commandText,connection);命令.Parameters.Add("@ID",SqlDbType.Int);命令.Parameters["@ID"].Value=customerID;//使用AddWithValue分配人口统计数据。//SQLServer会将字符串隐式转换为XML。命令.Parameters.AddWithValue("@demographics",demoXml);尝试{connection.Open();Int32rowsAffected=command.ExecuteNonQuery();Console.WriteLine("RowsAffected:{0}",rowsAffected);}catch(Exceptionex){Console.WriteLine(ex.Message);}}}对于MySQL,我不知道您可以使用的参数化查询库。你应该使用mysql_real_escape_string()或者你可以使用这个函数:publicstaticstringMySqlEscape(thisstringusString){if(usString==null){returnnull;}//MySQL的SQL编码推荐在这里://http://au.php.net/manual/en/function.mysql-real-escape-string.php//它转义了r,n,x00,x1a,baskslash、单引号和双引号返回Regex.Replace(usString,@"[rnx00x1a\'""]",@"$0");}通过将SQL参数对象传递给存储过程的正确构造的DAL,您不必担心这一点。实现业务对象和dal以抽象用户输入,使其不作为SQL执行,而是被识别为值。例子很有意思:以上是C#学习教程:清理SQL数据分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassSomeDal{publicvoidCreateUser(UseruserToBeCreated){using(connectionblabla){//createand执行一个命令对象,用来自用户对象的数据填充它的参数}}}publicclassUser{publicstringName{get;放;}...}publicclassUserBL{publicCreateUser(UseruserToBeCreated){SomeDalmyDal=newSomeDal();myDal.CreateUser(userToBeCreated);}}publicclassSomeUI{publicvoidHandleCreateClick(objectsender,eButtonClickEventArgs){UseruserToBeCreated=newUser(){Name=txtName.文本};UserBLuserBl=newUserBL();userBl.CreateUser(userToBeCreated);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
