zoukankan      html  css  js  c++  java
  • ADO.NET 基本操作

    概要

    ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库,类似于PHP中的PDO

    使用

    连接数据库 (Connection对象)

    1. 连接字符串

    基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)
    

    例如

    DataSource=.;Initial Catalog=myDataBase;UserId=myUsername;Password=myPassword;

     

     或者

    Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Trusted_Connection=False;

     也可以直接在VS数据库资源管理器中获取连接字符串

     

    2. 连接到数据库 (Connection对象)

    Connection对象有两个重要属性: 

    (1)ConnectionString:表示用于打开 SQL Server 数据库的字符串; 
    (2)State:表示 Connection 的状态,有Closed和Open两种状态。 

    Connection对象有两个重要方法:

    (1)Open()方法:指示打开数据库;

    (2)Close()方法:指示关闭数据库。

                string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa";
                //连接数据库,使用using可自动释放资源
                using (SqlConnection con = new SqlConnection(str)) {
                    //打开数据库
                    con.Open();
                    //关闭数据库
                    con.Close();
                }

    操作数据库(Command对象)

    Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。

    Command主要有三个方法: 

    ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作,类似于PDO中exec()

                using (SqlConnection con = new SqlConnection(str)) {
                    //打开数据库
                    con.Open();
    
                    //string sql = "insert into Book values('三国演义','魏蜀吴的故事',3)";  //增加
                    //string sql = "delete from Book where BookId = 4"; //删除
                    string sql = "update Book set BookName = '郭德纲相声选' where BookId = 2";  //修改
    
                    SqlCommand cmd = new SqlCommand(sql, con);
                    //执行sql 返回受影响的行数
                    int rows = cmd.ExecuteNonQuery();
                    //关闭数据库
                    con.Close();
                }

    ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列

    executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum),返回object对象,如查询不到返回null

                using (SqlConnection con = new SqlConnection(str)) {
                    //打开数据库
                    con.Open();
    
                    string sql = "select BookName from Book where BookId = 2";
                    //string sql = "select count(*) as total from Book";
    
                    SqlCommand cmd = new SqlCommand(sql, con);
                    object res = cmd.ExecuteScalar();
                    Console.WriteLine(res.ToString());
    
                    //关闭数据库
                    con.Close();
                    Console.Read();
                }

     

    ExecuteReader() 

    ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾

        class Program
        {
            static void Main(string[] args)
            {
                List<Book> Books = new List<Book>();
                string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";
                //连接数据库,使用using可自动释放资源
                using (SqlConnection con = new SqlConnection(str)) {
                    //打开数据库
                    con.Open();
    
                    string sql = "select BookName,BookContent from Book";
                    using (SqlCommand cmd = new SqlCommand(sql, con)) {
                        SqlDataReader rows = cmd.ExecuteReader();
                        if (rows.HasRows) {
                            //读取一行,同时指针向前移动
                            while (rows.Read())
                            {
                                //rows中返回的是object类型,需要手动转换成需要的类型
                                Book book = new Book(rows["BookName"].ToString(), rows["BookContent"].ToString());
                                Books.Add(book);
                            }
                        }
                    }
    
                    //关闭数据库
                    con.Close();
                    Console.Read();
                }
            }
        }
    
        class Book {
            private string _bookName;
            private string _bookContent;
    
            public string BookName
            {
                get
                {
                    return _bookName;
                }
    
                set
                {
                    _bookName = value;
                }
            }
    
            public string BookContent
            {
                get
                {
                    return _bookContent;
                }
    
                set
                {
                    _bookContent = value;
                }
            }
    
            public Book(string name,string content) {
                this._bookName = name;
                this._bookContent = content;
            }
        }

     SqlDataAdapter 使用 SqlDataAdapter 可以快速的查询数据库并返回表格,无需new sqlCommend ,然后通过遍历表格拿到数据,SqlDataAdapter 内部也是通过SqlCommend实现的

                string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";
    
                DataTable dt = new DataTable();
    
                //连接数据库,使用using可自动释放资源
                using (SqlConnection con = new SqlConnection(str)) {
                    con.Open();
                    string sql = "select * from Book";
                    using (SqlDataAdapter sda = new SqlDataAdapter(sql, str)) {
                        //将数据填充到dt中
                        sda.Fill(dt);
                    }
                    //关闭数据库
                    con.Close();
                }
                //遍历dt 获取数据
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Console.WriteLine(dt.Rows[i]["BookName"]);
                }
    
                Console.Read();
            }

    防SQL注入

    与PDO一样,ADO提供sql预处理功能

    PDO中使用占位符的方式,ADO也一样

    PDO

    $sql = "DELETE FROM `books` WHERE id = :id";    //使用占位符代替用户输入的id    
    $sth = $mysql->prepare($sql);        //绑定参数
    $sth->execute(array('id'=>$id));

    ADO

                string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";
                //连接数据库,使用using可自动释放资源
                using (SqlConnection con = new SqlConnection(str)) {
                    //使用占位符
                    string sql = "insert into Book values(@name,@content,@type)";
                    using (SqlCommand cmd = new SqlCommand(sql, con)) {
                        //绑定参数
                        cmd.Parameters.Add(new SqlParameter("@name", "西厢记"));
                        cmd.Parameters.Add(new SqlParameter("@content", "经典名著"));
                        cmd.Parameters.Add(new SqlParameter("@type", 3));
    
                        con.Open();
                        cmd.ExecuteNonQuery();
                    }
                    //关闭数据库
                    con.Close();
                }

     

  • 相关阅读:
    mySql基础
    ECSHOP模糊分词搜索和商品列表关键字飘红功能
    smarty在循环的时候计数来显示这是第几次循环的功能
    PHP Warning: 的解决方法
    ECSHOP生成缩略图模糊
    ECSHOP商品描述和文章里不加水印,只在商品图片和商品相册加水印
    ECSHOP_百度收录网址后面有?from=rss
    在ecshop中添加页面,并且实现后台管理
    windows 2003子目录权限丢失及子目录权限无法继承更改的解决方法
    Newtonsoft.Json初探
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9521487.html
Copyright © 2011-2022 走看看