如何把HTML语句直接保存到数据库

 默认情况下,出于安全的考虑,C#.net页面是不允许直接上传HTML语法的。但是有一种方法可以安全的实现数据上传。下面用一个实例说明如何实现:
 
 
 1using System.Data.SqlClient;
 2 
 3     static string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
 4     
 5 public bool InsertNews(string title, string content, string type, string created)
 6     {
 7      //在下面的sql语句中,使用了变量@title和@content
 8         string sql = "Insert Into News (title,content,type,created,createdate) Values(@title,@content," + type + ",'" + created + "','" + DateTime.Now.ToString() + "')";
 9         SqlConnection conn = new SqlConnection(connectionString);
10         SqlCommand cmd = new SqlCommand(sql, conn);
11         //注意下面四句
12         cmd.Parameters.Add(new SqlParameter("@title", SqlDbType.VarChar, 100)); //定义变量@title
13         cmd.Parameters["@title"].Value = title;     //变量@title赋值
14         cmd.Parameters.Add(new SqlParameter("@content", SqlDbType.NText)); //定义变量@content
15         cmd.Parameters["@content"].Value = content;    //变量@content赋值
16         
17         conn.Open();
18         int flag = cmd.ExecuteNonQuery();
19         conn.Close();
20         if (flag != -1)
21              return true;
22         else
23              return false;
24     }

25
     
     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-15 11:11  Gofficer  阅读(2096)  评论(0)    收藏  举报