原创 操作数据库的三种途径收藏

  

操作数据库可以分这么三种,第一种,直接写硬SQL代码,不要参数,第二种,直接写硬代码,要参数,第三种,调用存储过程。

我们以一个登录模块为例,现在页面有两文本框,一按纽,实现验证用户名密码的功能。第一种方法主要代码如下:

                 SqlConnection conn =new  SqlConnection                    ("server=;database=news2;uid=sa;pwd=");
            conn.Open();
             SqlCommand cmd=new SqlCommand();
             cmd.CommandText="select count(*)from users where name='"+this.TextBox1.Text+"'and pwd='"+this.TextBox2.Text+"'";
               cmd.Connection=conn;
               int i=(int)cmd.ExecuteScalar();
              Response.Write(i.ToString());

 if(i==1)

 {

 Response.Redirect("add.aspx");}

        else

 {

      Label1.Text="error!"

        }

第二种途径

SqlConnection conn =new  SqlConnection("server=;database=news;uid=sa;pwd=");

 conn.Open();//打开数据库

SqlCommand cmd=new SqlCommand();//建立命令对象

   cmd.CommandText="select count(*)from users where name=@name and pwd=@pwd";

   cmd.Connection=conn;//设置连接

    SqlParameter p= new SqlParameter("@name",SqlDbType.Char,10);

//定义参数

   p.Value=this.TextBox1.Text;

     cmd.Parameters.Add(p);//添加参数到集合

     p= new SqlParameter("@pwd",SqlDbType.Char,10);

 p.Value=this.TextBox2.Text;

  cmd.Parameters.Add(p);

      int i=(int)cmd.ExecuteScalar();

       if(i==1)

         {

               Response.Redirect("add.aspx");}

          else

         {

                Label1.Text="error!"

                }

第三种途径

SqlConnection conn =new  SqlConnection("server=;database=news;uid=sa;pwd=");

                    conn.Open();//打开数据库

                    SqlCommand cmd=new SqlCommand();//建立命令对象

                            cmd.CommandText=" checkLogin";//设置命令文本

                    cmd.CommandType=CommandType.StoredProcedure;

//设置文本类型

                    cmd.Connection=conn;//设置连接

                    SqlParameter p= new SqlParameter("@name",SqlDbType.Char,10);

//定义参数

                    p.Value=this.TextBox1.Text;

                    cmd.Parameters.Add(p);//添加参数到集合

                    p= new SqlParameter("@pwd",SqlDbType.Char,10);

                    p.Value=this.TextBox2.Text;

                    cmd.Parameters.Add(p);

                    int i=(int)cmd.ExecuteScalar();

                    if(i==1)

                    {

                           Response.Redirect("add.aspx");}

                    else

                    {

                           Label1.Text="error!"

                            }

接下来对这三种方法做分析

第一方法不能防范SQL注入式方式攻击,比如在第一个文本框输入asd'or's'='s  第二个同样输入asd'or's'='s ,可以发现成功通过验证。

第二种直接写硬SQL代码,事实上不是每个人都能写出优良的SQL代码来,可以由数据库管理员或工程师来写,这样,一方面减轻程序员的工作,另一方面也可以使数据库与应用程序保持独立,这样有利于系统的移植与维护。

当然第三种是推荐使用的,好处呢,就是前面所写的。

发表于 @ 2007年10月30日 01:51:00|评论(loading...)

 | 旧一篇: ADO.NET中的职责分配

用户操作
[即时聊天] [发私信] [加为好友]
heshou5
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
文章分类
    收藏
      存档
      软件项目交易
      Csdn Blog version 3.1a
      Copyright © heshou5