默认情况下,出于安全的考虑,C#.net页面是不允许直接上传HTML语法的。但是有一种方法可以安全的实现数据上传。下面用一个实例说明如何实现:
 
 using System.Data.SqlClient;
 
     static string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
     
 public bool InsertNews(string title, string content, string type, string created)
     {
      //在下面的sql语句中,使用了变量@title和@content
         string sql = "Insert Into News (title,content,type,created,createdate) Values(@title,@content," + type + ",'" + created + "','" + DateTime.Now.ToString() + "')";
         SqlConnection conn = new SqlConnection(connectionString);
         SqlCommand cmd = new SqlCommand(sql, conn);
         //注意下面四句
         cmd.Parameters.Add(new SqlParameter("@title", SqlDbType.VarChar, 100)); //定义变量@title
         cmd.Parameters["@title"].Value = title;     //变量@title赋值
         cmd.Parameters.Add(new SqlParameter("@content", SqlDbType.NText)); //定义变量@content
         cmd.Parameters["@content"].Value = content;    //变量@content赋值
         
         conn.Open();
         int flag = cmd.ExecuteNonQuery();
         conn.Close();
         if (flag != -1)
              return true;
         else
              return false;
     }
     
     C#.net的页面默认是不允许HTML语法直接传送到后台的,所以即使如上面的写法,仍然无法实现数据上传。用TextBox也不行。
     需要在aspx页面<%@page %>中增加参数定义:ValidateRequest="false"。写法如下:
     <%@ Page ValidateRequest="false" Language="C#" AutoEventWireup="true" CodeFile="NewsContent.aspx.cs" Inherits="Manage_NewsContent" %>
     
     这种写法把前台传过来的数据完全当作数据写进sql语句,所以也不用担心sql注入入侵。即使是单引号、双引号也没有问题,完全不会影响sql语句的执行。
     个人觉得,是一中值得推广的好方法。
posted on 2007-05-16 07:35  站在天空下的猪  阅读(1948)  评论(0编辑  收藏  举报