默认情况下,出于安全的考虑,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语句的执行。
个人觉得,是一中值得推广的好方法。
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语句的执行。
个人觉得,是一中值得推广的好方法。