一.使用值的方式写入数据库
protected void Insert_Click1(object sender, ImageClickEventArgs e)
{
//创建数据库链接
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Example_LoginConnectionString"].ToString());
//定义SQL插入语句,注意写法啊!
string cmdStr = "insert into 信息列表(用户名,密码,姓名,性别,备注) values('" + t_User.Text.Trim() + " ','" + t_Pwd.Text.Trim();
cmdStr += "','" + t_Name.Text.Trim() + "','" + DropDownList.SelectedValue + " ',' " + t_Remark.Text.Trim() + "')";
SqlCommand cmd = new SqlCommand(cmdStr, con);
try
{
con.Open();
cmd.ExecuteNonQuery();//出现了异常
}
catch (SqlException sqlex)
{
//-----
Response.Write(sqlex.Message + "<br>");
}
finally
{
con.Close();
}
}
但是,这样的写入数据库不够安全,比如说在用户验证登录时容易遭到"注入攻击",比如别人在登录的时候使用值传数据的话那么验证输入语句 select UserID froms Users where UserName='username' AND Password='password',在用户对用户名框中写入'username' or '1==1'等,那么原句就变为select UserID froms Users where UserName='username' OR '1==1' AND Password='password' ,所以用户不管输入什么密码,都可以登录.
二,利用参数传值
此方法改善了值传数据的缺点
protected void Btnlogin_Click(object sender, EventArgs e)
{
//当点击注册的时候触发的事件
//利用参数传值
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["E_login3"].ConnectionString);
string cmdstr="insert into 学生信息表(学号,密码,院校,专业,姓名,生日,email,备注) values (@login,@pwd,@college,@manger,@name,@birthday,@email,@remark)";
SqlCommand cmd = new SqlCommand(cmdstr, cnn);//定义数据库命令语句
SqlParameter p1 = new SqlParameter("@login", SqlDbType.VarChar, 64);
p1.Value = t_code.Text.Trim();
cmd.Parameters.Add(p1);//一个一个的添加参数
SqlParameter p2 = new SqlParameter("@pwd", SqlDbType.VarChar, 64);
p2.Value =t_pwd2.Text.Trim();
cmd.Parameters.Add(p2);//注意了,类型和大小参数要和数据库的一致啊!
SqlParameter p3 = new SqlParameter("@college", SqlDbType.NText, 16);
p3.Value = DropCollege.SelectedValue;
cmd.Parameters.Add(p3);
SqlParameter p4 = new SqlParameter("@manger", SqlDbType.NText, 16);
p4.Value = DropManger.SelectedValue;
cmd.Parameters.Add(p4);
SqlParameter p5 = new SqlParameter("@name", SqlDbType.NText, 16);
p5.Value = t_name.Text.Trim();
cmd.Parameters.Add(p5);
SqlParameter p6 = new SqlParameter("@birthday", SqlDbType.Char, 20);
p6.Value = TextBox1.Text;
cmd.Parameters.Add(p6);
SqlParameter p7 = new SqlParameter("@email", SqlDbType.NText, 16);
p7.Value =t_email.Text.Trim();
cmd.Parameters.Add(p7);
SqlParameter p8 = new SqlParameter("@remark", SqlDbType.NText, 16);
p8.Value = t_remark.Text;
cmd.Parameters.Add(p8);
try
{
cnn.Open();//打开数据库
cmd.ExecuteNonQuery();//执行数据库语句
}
catch(SqlException sqlex)
{
Response.Write(sqlex.Message+"<br>");
}
finally
{
cnn.Close();//关闭数据库
}
}