黑马程序员ADO.NET学习

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

//ADO.NET是一组向.NET程序员公开数据访问服务的类,它提供了一系列的方法用于支持对Microsoft SQL Server和XML等数据源进行访问,客户端应用程序可以使用ADO.NET来连接到这些数据源执行查询、增加、删除和修改数据。ADO.NET支持两种访问数据的模型,无连接模型和连接模型。

//无连接模型:将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据(例如:DataSet)。

//连接模型:依赖于逐记录的访问,这种访问要求打开并保持与数据库的连接。

//ADO.NET被分割成两大类:一类是与数据库直接连接的联机对象(.NET Data Provider),其中包含了Command对象、DataReader对象以及DataAdapter对象等。另一类则是不用与数据库保持连接的断线对象,例如DataSet。

//SqlDataReader类似于指针,不会保存数据在电脑上,会在数据库服务器中一条条的读,服务器连接断开后就不能读取数据。优点,对程序占用内存没有影响,适合用在大数据量的数据操作

//SqlDataAdapter是DataSet和数据库之间沟通的桥梁。 数据集DataSet包含若干DataTable表,DataTable包含若干行DataRow。优点:将查询结果填充到本地内存中,即使连接断开也不会影响数据的读取。适合用在小数据量的数据操作,大量的数据操作会非常占用内存。

//使用参数化执行数据库操作可以防止一些SQL漏洞注入攻击。

配置Web.Config文件进行数据库连接:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
  <add name="MSSqlDB" 
  connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Demo.mdf;Integrated Security=True;User Instance=True"/>
    <add name="Demo" connectionString="Server=.\SQLEXPRESS;Database=Demo;User ID=sa;Password=123"/>
  </connectionStrings>
</configuration>

使用SqlDataReader读取数据库中的数据:

string strConn = ConfigurationManager.ConnectionStrings["MSSqlDB"].ConnectionString;
string sql = "SELECT * FROM T_Demo";
          using (SqlConnection _SqlConn = new SqlConnection(strConn))//实例化数据库连接对象
            {
              using (SqlCommand _SqlCmd = _SqlConn.CreateCommand())//实例化数据库命令执行对象
                {
                    _SqlCmd.CommandText = sql;//设置要执行的sql语句
                       _SqlConn.Open();//打开数据库连接
                    using (SqlDataReader _SqlReader = _SqlCmd.ExecuteReader())//实例化数据库读取对象
                    {
                        while(_SqlReader.Read())//如果读取到数据则返回true
                        {
                            string name = _SqlReader.GetString(_SqlReader.GetOrdinal("Name"));//获取数据库中的字段
                                 Response.Write(name);
                        }
                  }
               }
            }

使用SqlDataAdapter将数据库中读取的数据保存到数据集中:

string strConn = ConfigurationManager.ConnectionStrings["MSSqlDB"].ConnectionString;
string sql = "SELECT * FROM T_Demo";
          using (SqlConnection _SqlConn = new SqlConnection(strConn))//实例化数据库连接对象
            {
              using (SqlCommand _SqlCmd = new SqlCommand(sql,_SqlConn))//实例化数据库命令执行对象
                {
                 using (SqlDataAdapter _SqlAdapter= new SqlDataAdapter(_SqlCmd))//实例化数据适配器对象
                    {
                        DataTable data = new DataTable();//实例化数据集,这是一个在内存中的缓存数据
                            _SqlAdapter.Fill(data);//使用数据适配器填充数据集
                            foreach ( DataRow row in data.Rows)
                        {
                            Response.Write(row["Name"].ToString());
                        }
                  }
               }
           }

SQL漏洞注入攻击:SELECT * FROM T_User WHERE UserName = '1' AND Password = '1' or '1'='1'

参数化执行查询操作:

            string strConn = ConfigurationManager.ConnectionStrings["MSSqlDB"].ConnectionString;
            string sql = "SELECT * FROM T_Demo WHERE Name=@name AND UserPwd=@pwd";
            using (SqlConnection _SqlConn=new SqlConnection(strConn))
            {
                using (SqlCommand _SqlCmd=new SqlCommand(sql,_SqlConn))
                {
                     //这样写程序会把输入的值直接拿到数据库去比对,而不会去拼接字符串
                       _SqlCmd.Parameters.Add(new SqlParameter("@name", "admin"));
                    _SqlCmd.Parameters.Add(new SqlParameter("@pwd", "admin"));
                    _SqlConn.Open();
                    int result = Convert.ToInt32(_SqlCmd.ExecuteScalar());
                    Response.Write(result);
                }
            }

参数化执行非查询操作:

        protected void btnDemo_Click(object sender, EventArgs e)
        {
            string sql = "INSERT INTO T_Demo (Name,Age,Sex)VALUES(@name,@age,@sex)";
            Dictionary<string, object> paramValue = new Dictionary<string, object>();
            paramValue.Add("@name", "张耕明");
            paramValue.Add("@age", "28");
            paramValue.Add("@sex", "");
            Response.Write(ExecuteNonQuery(sql, paramValue));
        }

        public int ExecuteNonQuery(string sql, Dictionary<string, object> paramValue)
        {
            string strConn = ConfigurationManager.ConnectionStrings["MSSqlDB"].ConnectionString;
            using (SqlConnection _SqlConn=new SqlConnection(strConn))
            {
                using (SqlCommand cmd = new SqlCommand(sql, _SqlConn))
                {
                    foreach (var v in paramValue)
                    {
                        cmd.Parameters.Add(new SqlParameter(v.Key, v.Value));
                    }
                    _SqlConn.Open();
                    return cmd.ExecuteNonQuery();
                }   
            }
        }

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima/

转载于:https://www.cnblogs.com/-zgm/archive/2012/11/11/2765535.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值