ADO.NET 总述


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,ado.net微软在.NET中创建分布式和数据共享应用程序的开发接口,它就是一组处理数据的类。

 2, 连接数据库的两种状态 -- 有连接,无连接。
    (1)有连接:用户得到的数据始终与数据源连接,直到应用程序结束。因数据是实时的,故可用连接状态来读取数据,以保持数据的最新。     
            好处:得到的数据总是最新的。同步问题易于解决,实时性高
            缺点:必须保持持续的网络连接,扩展性差。
    (2)无连接:从数据源得到数据后,这部分数据存储到内在中,可以进行数据的编辑,与更改。
            好处:可以在任何时间操作,不独占连接。
            缺点:数据不是实时的,要解决同步问题。

 3,有连接的操作:主要用来数据的读取。连接数据步骤:
       (1)声明SqlConnecton对象,并指定连接字符串属性
       (2)声明SqlCommand对象,指定sql命令及SqlConnection
       (3)SqlCommnad执行方法,返回数据集
       (4)关闭数据集,关闭Connection

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=192.168.16.55;Initial Catalog=BRM;persist security info=False;user id=BRM;password=BRM2009;min pool size=1;max pool size=100;" ;
        conn.Open();
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        command.CommandText = "SELECT * FROM bdOrder";
        SqlDataReader  dr = command.ExecuteReader();
        GridView1.DataSource = dr;
        GridView1.DataBind();
        dr.Close();
        conn.Close();  //注若在GridView获取数据之前Close关闭,则将收不到数据。但在无连接进可在之前关闭,因为数据已存入在内存中。

       注:利用SqlConnection, SqlCommand, SqlDataReader默认是支持SqlServer的,若想支持MySql,项目中要引入具体的dll文件 如引入MySql.Data.dll, 在程序中using MySql.Data.MySqlClient;利用MySqlConnection,MySqlCommand,MySqlDataReader即可。
SqlCommand 常用方法:
    (1)更新删除操作:ExecuteNonQuery 对连接执行 Transact-SQL 语句并返回受影响的行数, int类型              返回数据集操作: ExecuteReader 已重载。 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。 返回一个数据操作: ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 
         返回一个XML: ExecuteXmlReader 将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。 
        
  (2) 传参
             1),直接在CommandText写参数;如:command.CommandText = "SELECT * FROM bdOrder WHERE id>" + id;2),利用SqlParameter传参,防止Sql注入
             command.CommandText = "SELECT * FROM mdCustomerType WHERE ORDERBY orderby";
                          SqlParameter sp = new SqlParameter( "@orderby" ,8);  
                          command.Parameters.Add(sp);
        注:不同的数据库用的符号是不同的,SqlServer用 “@”, 而MySql 则用 “? 

4, 无连接的操作, 区别在于执行数据操作时用的是SqlDataAdapter,可利用SqlCommand构造Sql语句,并传参。最后是SqlDataAdapter来执行 返回的结果用Fill方法填充DataSet或DataTable
        (1)string ConnectionString = "Data Source=192.168.16.55;Initial Catalog=BRM;persist security info=False;user id=BRM;password=BRM2009;min pool size=1;max pool size=100;";
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConnectionString;
        conn.Open();
        SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM bmdCustomer",conn);
        DataSet ds = new DataSet();
        sda.Fill( ds );
        conn.Close();             //conn可提前关闭
        GridView1.DataSource = NoConnection(conn);
        GridView1.DataBind();
//操作也可用: 
       SqlDataAdapter sda = new SqlDataAdapter();
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        command.CommandText = "SELECT * FROM mdCustomerType WHERE ORDERBY >@orderby";
        SqlParameter sp = new SqlParameter("@orderby", 10);
        command.Parameters.Add(sp);
        sda.SelectCommand = command;   //这样就可传参。
       其实SqlDataAdapter就是SqlCommand的适配器,主要内容由SqlCommand完成构建,它只是负责执行。

     (2)SqlDataAdapter 类似于SqlCommand 的Exec方法
               查询:  sda.SelectCommand;
               插入:  sda.InsertCommand;
               更新:  sda.UpdateCommand;
               删除:  sda.DeleteCommand;

       
5,执行存储过程
      指定SqlCommand的CommandType, CommandText即可
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;   //默认执行的是Sql语句
        cmd.CommandText = "bmdCustomer_sel";                      //存储过程名称, 默认是Sql语句
        SqlParameter[] storedParameters = {
                                          new SqlParameter( "@TranType", "ID" ),
                                          new SqlParameter( "@ID", "277" )
                                          };
        foreach (SqlParameter sp in storedParameters) {
            cmd.Parameters.Add( sp );
        }

        SqlDataReader dr = cmd.ExecuteReader();

注:CommandType指定类型:(1)Text :默认,CommandText为Sql命令。
                                            (2)TableDirect CommandText为表的名称。 (3)StoredProcedure CommandText为存储过程的名称。